ค้นหาเส้นทางแบบเต็มของตัวแปล Python หรือไม่


402

ฉันจะค้นหาเส้นทางแบบเต็มของตัวแปล Python ที่กำลังทำงานอยู่จากภายในสคริปต์ Python ที่กำลังเรียกใช้งานอยู่ได้อย่างไร

คำตอบ:


607

sys.executable มีเส้นทางแบบเต็มของตัวแปล Python ที่กำลังทำงานอยู่

import sys

print(sys.executable)

ซึ่งตอนนี้เอกสารที่นี่


1
นี้ดูเหมือนจะไม่ทำงานจากสคริปต์กับ shebang ดำเนินการเป็น/usr/bin/env python env -i ./scriptในกรณีนั้นจะส่งคืนไดเรกทอรีการทำงานปัจจุบัน
John Freeman

2
@ JohnFreeman: ฉันลองในกล่อง GNU / Linux ด้วย GNU coreutils 8.4 (env) และ Python 3.4.2 จะกลับมาที่ถูกต้องเต็มรูปแบบไบนารีเส้นทางผ่าน#!/usr/bin/env python3 sys.executableบางที OS หรือ Python เวอร์ชั่นของคุณอาจแตกต่างกันเล็กน้อย
kevinarpe

25
โปรดทราบว่าสิ่งนี้จะไม่ส่งคืนชื่อของ Python interpreter หาก Python ถูกฝังในบางแอพพลิเคชั่น
mic_e

1
ฉันลองสิ่งนี้กับ shebang สำหรับ python2 และ python3 และพิมพ์ไฟล์ปฏิบัติการที่ถูกต้อง ฉันยังพยายามที่ไม่มี shebang และเรียกสคริปต์ด้วยpythonและpython3คำสั่งและพิมพ์ปฏิบัติการที่ถูกต้อง
David Baucum

8

เพียงสังเกตวิธีการใช้ประโยชน์ที่แตกต่างกันโดยใช้os.environ:

import os
python_executable_path = os.environ['_']

เช่น

$ python -c "import os; print(os.environ['_'])"
/usr/bin/python

2
ไร้ประโยชน์ แต่ตลก :) (อาจจะยังไม่ได้พกพา)
eudoxos

2
ดูเหมือนว่า_จะถูกกำหนดโดยเปลือก แต่ไม่จำเป็นต้องตั้งค่าดังนั้นนี่อาจให้คำตอบที่ผิด
vy32

2
FYI เมื่ออยู่ในสมุดบันทึก Jupyter สิ่งนี้จะให้เส้นทางไปยังสคริปต์ตัวเรียกใช้เคอร์เนล
Mr Fooz

2

มีทางเลือกสองสามวิธีในการคำนวณไพ ธ อนที่ใช้อยู่ในปัจจุบันใน Linux คือ: 1) which pythonคำสั่ง 2) command -v pythonคำสั่ง 3) type pythonคำสั่ง

ในทำนองเดียวกันบน Windows ที่มี Cygwin จะได้ผลลัพธ์เช่นเดียวกัน

kuvivek@HOSTNAME ~
$ which python
/usr/bin/python

kuvivek@HOSTNAME ~
$ whereis python
python: /usr/bin/python /usr/bin/python3.4 /usr/lib/python2.7 /usr/lib/python3.4        /usr/include/python2.7 /usr/include/python3.4m /usr/share/man/man1/python.1.gz

kuvivek@HOSTNAME ~
$ which python3
/usr/bin/python3

kuvivek@HOSTNAME ~
$ command -v python
/usr/bin/python

kuvivek@HOSTNAME ~
$ type python
python is hashed (/usr/bin/python)

หากคุณอยู่ในหลามเชลล์แล้ว ลองสิ่งเหล่านี้ หมายเหตุ: นี่เป็นวิธีสำรอง ไม่ใช่วิธี pythonic ที่ดีที่สุด

>>>
>>> import os
>>> os.popen('which python').read()
'/usr/bin/python\n'
>>>
>>> os.popen('type python').read()
'python is /usr/bin/python\n'
>>>
>>> os.popen('command -v python').read()
'/usr/bin/python\n'
>>>
>>>

5
"จากภายในสคริปต์ Python ที่กำลังเรียกใช้งานในปัจจุบัน" เขียน OP
nodakai

3
ตัวอย่าง "python shell แล้ว" ของคุณทุกคนคิดว่า python shell ที่เริ่มต้นคือสิ่งที่คุณจะได้รับหากคุณพิมพ์pythonจาก shell หากคุณเริ่มต้นด้วยเส้นทางที่แตกต่างอย่างชัดเจน (เช่น/opt/python/2.5/bin/python) หรือใช้python3และจากนั้นเรียกใช้คำสั่ง python คำสั่งเหล่านั้นทั้งหมดสร้างคำตอบที่ไม่ถูกต้องและไม่เกี่ยวข้องกับวิธีที่ไม่ได้เป็นวิธีการที่ไพเราะที่สุด
Anthon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.