ฉันจะค้นหาเส้นทางแบบเต็มของตัวแปล Python ที่กำลังทำงานอยู่จากภายในสคริปต์ Python ที่กำลังเรียกใช้งานอยู่ได้อย่างไร
ฉันจะค้นหาเส้นทางแบบเต็มของตัวแปล Python ที่กำลังทำงานอยู่จากภายในสคริปต์ Python ที่กำลังเรียกใช้งานอยู่ได้อย่างไร
คำตอบ:
sys.executable
มีเส้นทางแบบเต็มของตัวแปล Python ที่กำลังทำงานอยู่
import sys
print(sys.executable)
ซึ่งตอนนี้เอกสารที่นี่
#!/usr/bin/env python3
sys.executable
บางที OS หรือ Python เวอร์ชั่นของคุณอาจแตกต่างกันเล็กน้อย
python
และpython3
คำสั่งและพิมพ์ปฏิบัติการที่ถูกต้อง
เพียงสังเกตวิธีการใช้ประโยชน์ที่แตกต่างกันโดยใช้os.environ
:
import os
python_executable_path = os.environ['_']
เช่น
$ python -c "import os; print(os.environ['_'])"
/usr/bin/python
_
จะถูกกำหนดโดยเปลือก แต่ไม่จำเป็นต้องตั้งค่าดังนั้นนี่อาจให้คำตอบที่ผิด
มีทางเลือกสองสามวิธีในการคำนวณไพ ธ อนที่ใช้อยู่ในปัจจุบันใน 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'
>>>
>>>
python
จาก shell หากคุณเริ่มต้นด้วยเส้นทางที่แตกต่างอย่างชัดเจน (เช่น/opt/python/2.5/bin/python
) หรือใช้python3
และจากนั้นเรียกใช้คำสั่ง python คำสั่งเหล่านั้นทั้งหมดสร้างคำตอบที่ไม่ถูกต้องและไม่เกี่ยวข้องกับวิธีที่ไม่ได้เป็นวิธีการที่ไพเราะที่สุด
/usr/bin/env python
env -i ./script
ในกรณีนั้นจะส่งคืนไดเรกทอรีการทำงานปัจจุบัน