Tìm đường dẫn đầy đủ của trình thông dịch Python?


402

Làm cách nào để tìm đường dẫn đầy đủ của trình thông dịch Python hiện đang chạy trong tập lệnh Python hiện đang thực thi?

Câu trả lời:


607

sys.executable chứa đường dẫn đầy đủ của trình thông dịch Python hiện đang chạy.

import sys

print(sys.executable)

mà bây giờ được ghi lại ở đây


1
Điều này dường như không hoạt động từ các tập lệnh với một shebang được /usr/bin/env pythonthực thi như env -i ./script. Trong trường hợp đó, nó trả về thư mục làm việc hiện tại.
John Freeman

2
@JohnFreeman: Tôi đã thử điều này trên hộp GNU / Linux w / GNU coreutils 8.4 (env) và Python 3.4.2. #!/usr/bin/env python3sẽ trả về đường dẫn nhị phân đầy đủ chính xác thông qua sys.executable. Có lẽ phiên bản OS hoặc Python của bạn hoạt động hơi khác nhau.
kevinarpe

25
Lưu ý rằng điều này sẽ không trả về tên của trình thông dịch Python nếu Python được nhúng trong một số ứng dụng.
mic_e 14/07/2015

1
Tôi đã thử điều này với shebang cho python2 và python3 và nó đã in đúng tệp thực thi. Tôi cũng đã cố gắng không có công việc và được gọi là kịch bản với pythonpython3lệnh và nó in thực thi chính xác.
David Baucum

8

Chỉ cần lưu ý một cách khác nhau về tính hữu dụng đáng ngờ, sử dụng os.environ:

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

ví dụ

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

2
vô dụng nhưng buồn cười :) (có lẽ cũng không di động)
eudoxos

2
Có vẻ như _được thiết lập bởi vỏ. Nhưng nó không cần phải được đặt, vì vậy điều này có thể đưa ra câu trả lời sai.
vy32

2
FYI, khi trong một máy tính xách tay Jupyter, điều này đưa ra đường dẫn đến kịch bản trình khởi chạy kernel.
Ông Fooz

2

Có một vài cách khác để tìm ra python hiện đang được sử dụng trong Linux là: 1) which pythonlệnh. 2) command -v pythonlệnh 3)type python lệnh

Tương tự Trên Windows với Cygwin cũng sẽ có kết quả tương tự.

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)

Nếu bạn đã ở trong vỏ trăn. Hãy thử bất cứ ai trong số này. Lưu ý: Đây là một cách thay thế. Không phải là cách pythonic tốt nhất.

>>>
>>> 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
"từ bên trong tập lệnh Python hiện đang thực thi" đã viết OP
gật đầu

3
Các ví dụ "đã có trong vỏ trăn" của bạn, tất cả đều cho rằng vỏ trăn bắt đầu là những gì bạn nhận được nếu bạn nhập pythontừ vỏ. Nếu bạn bắt đầu với một đường dẫn khác nhau rõ ràng (ví dụ /opt/python/2.5/bin/python), hoặc sử dụng python3và sau đó chạy các lệnh python đó, tất cả chúng đều tạo ra câu trả lời không chính xác và điều đó không liên quan gì đến việc không phải là cách pythonic nhất, nó hoàn toàn sai.
Anthon
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.