Bagaimana cara mengetahui jalur python saya menggunakan python?

350

Bagaimana cara mengetahui direktori mana yang terdaftar dalam PYTHONPATHvariabel sistem saya , dari dalam skrip Python (atau shell interaktif)?

Paul D. Waite
sumber
24
Saya tidak yakin apa yang Anda coba lakukan, tetapi jika Anda ingin tahu folder mana yang digunakan untuk mencari modul yang sedang diimpor, Anda sebaiknya tidak mengandalkan PYTHONPATH. Gunakan sys.pathuntuk itu.
Vanuan
Dengan eksperimen sederhana, saya menemukan jawaban Vanuan di bawah ini (mencetak sys.path) hanya mencetak PYTHONPATH. Ini berfungsi setelah kami mengubah nilai menggunakan add_path (new_path) yang menambah PYTHONPATH.
Chan Kim
6
Judul posting ini dan badan mengajukan dua pertanyaan berbeda. sys.pathadalah "Daftar string yang menentukan jalur pencarian untuk modul" - docs.python.org/2/library/sys.html#sys.path . PYTHONPATH adalah variabel lingkungan yang memengaruhi daftar ini. Dengan definisi yang masuk akal sys.pathadalah "jalur python" Anda.
spinkus
4
Jangan lupakan python -m site.
Andrew McKinlay

Jawaban:

236

sys.pathmungkin termasuk item yang tidak spesifik dalam PYTHONPATHvariabel lingkungan Anda . Untuk meminta variabel secara langsung, gunakan:

import os
try:
    user_paths = os.environ['PYTHONPATH'].split(os.pathsep)
except KeyError:
    user_paths = []
Mark tebusan
sumber
3
(atau, lebih umum ... split (os.sep)). Tidak tahu mengapa Anda tidak mendapatkan cinta, Mark. Jawaban Anda secara teknis lebih akurat daripada jawaban Paul D Waite sendiri untuk pertanyaannya ????
mjv
5
os.sep tidak benar, lihat stackoverflow.com/questions/1499019/…
Mark Ransom
2
Dan masalah dengan pemisah itu mungkin mengapa saya tidak mendapatkan cinta. Terima kasih telah meluruskan saya.
Mark Ransom
11
Dan jika menerima KeyError, apakah itu berarti PYTHONPATH tidak didefinisikan dalam sistem saya? Apakah itu masalah? Terima kasih
glarrain
9
@ glarrin, benar - KeyError berarti PYTHONPATH tidak didefinisikan. Itu tidak akan menjadi masalah karena sudah ada jalur default yang diatur, lihat sys.path.
Mark Ransom
600

Anda mungkin juga menginginkan ini:

import sys
print(sys.path)

Atau sebagai satu liner dari terminal:

python -c "import sys; print('\n'.join(sys.path))"

Peringatan : Jika Anda memiliki beberapa versi Python diinstal, Anda harus menggunakan perintah yang sesuai python2atau python3.

Vanuan
sumber
Sama. Linux aaa.com 2.6.18-4-686-bigmem # 1 SMP Rabu 6 Jun 09 09:07:07 UTC 2007 i686 GNU / Linux ... Debian Sarge
Spechal
7
Ini adalah cara platform dan independen lingkungan untuk mendapatkan jalur python runtime saat ini.
Dmitry Minkovsky
13
Jawaban ini jauh lebih bermanfaat untuk situasi saya daripada jawaban yang diterima. Saya tahu apa variabel lingkungan saya. Saya perlu tahu di mana python memutuskan untuk menunjuk selain variabel lingkungan saya.
Vortisitas
Untuk Python 3:python -c "import sys; print('\n'.join(sys.path))"
mirceamironenco
@mirceamironenco berubah
Vanuan
10

Tampaknya tidak dapat mengedit jawaban lainnya. Memiliki kesalahan kecil karena hanya Windows. Solusi yang lebih umum adalah dengan menggunakan os.sep seperti di bawah ini:

sys.path mungkin menyertakan item yang tidak secara khusus dalam variabel lingkungan PYTHONPATH Anda. Untuk meminta variabel secara langsung, gunakan:

import os
os.environ['PYTHONPATH'].split(os.pathsep)
Vitali
sumber
6
Untuk pembaca masa depan: os.sepmengembalikan pemisah direktori untuk sistem operasi, mis /. Pemisah yang digunakan dalam jalur Python berbeda, dan dikembalikan oleh os.pathsepseperti yang ditunjukkan pada jawaban yang diterima.
Paul D. Waite
3

PYTHONPATH adalah variabel lingkungan yang nilainya adalah daftar direktori. Setelah diatur, digunakan oleh Python untuk mencari modul yang diimpor, bersama dengan std lainnya. dan direktori perpustakaan pihak ketiga yang tercantum di "sys.path" Python.

Seperti variabel lingkungan lainnya, Anda dapat mengekspornya dalam shell atau di ~ / .bashrc, lihat di sini . Anda dapat meminta os.environ ['PYTHONPATH'] untuk nilainya dalam Python seperti yang ditunjukkan di bawah ini:

$ python3 -c "import os, sys; print(os.environ['PYTHONPATH']); print(sys.path) if 'PYTHONPATH' in sorted(os.environ) else print('PYTHONPATH is not defined')"

JIKA didefinisikan dalam shell sebagai

$ export PYTHONPATH=$HOME/Documents/DjangoTutorial/mysite

MAKA hasil =>

/home/Documents/DjangoTutorial/mysite
['', '/home/Documents/DjangoTutorial/mysite', '/usr/local/lib/python37.zip', '/usr/local/lib/python3.7', '/usr/local/lib/python3.7/lib-dynload', '/usr/local/lib/python3.7/site-packages']

Hasil LAIN =>

PYTHONPATH is not defined

Untuk mengatur PYTHONPATH ke beberapa jalur, lihat di sini .

Perhatikan bahwa seseorang dapat menambah atau menghapus jalur pencarian melalui sys.path.insert (), del atau hapus () pada saat run-time, tetapi TIDAK melalui os.environ []. Contoh:

>>> os.environ['PYTHONPATH']="$HOME/Documents/DjangoTutorial/mysite"
>>> 'PYTHONPATH' in sorted(os.environ)
True
>>> sys.path // but Not there
['', '/usr/local/lib/python37.zip', '/usr/local/lib/python3.7', '/usr/local/lib/python3.7/lib-dynload', '/usr/local/lib/python3.7/site-packages']

>>> sys.path.insert(0,os.environ['PYTHONPATH'])
>>> sys.path // It's there
['$HOME/Documents/DjangoTutorial/mysite', '', '/usr/local/lib/python37.zip', '/usr/local/lib/python3.7', '/usr/local/lib/python3.7/lib-dynload', '/usr/local/lib/python3.7/site-packages']
>>> 

Singkatnya, PYTHONPATH adalah salah satu cara menentukan jalur pencarian Python untuk modul yang diimpor di sys.path. Anda juga dapat menerapkan operasi daftar langsung ke sys.path tanpa bantuan PYTHONPATH.

Leon Chang
sumber
0

Python memberitahuku di mana ia tinggal ketika itu memberi saya pesan kesalahan :)

>>> import os
>>> os.environ['PYTHONPATH'].split(os.pathsep)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\martin\AppData\Local\Programs\Python\Python36-32\lib\os.py", line 669, in __getitem__
    raise KeyError(key) from None
KeyError: 'PYTHONPATH'
>>>
C4rnot
sumber
-1

Gunakan ini:

import sys
print(sys.executable)

Atau satu baris dari cmd:

python -c "import sys; print(sys.executable)"
matan h
sumber
1
Tampaknya penulis pertanyaannya adalah meminta daftar direktori python bukan jalan ke python aktual yang dapat dieksekusi.
Sergey Shubin