menambahkan direktori ke sys.path / PYTHONPATH


130

Saya mencoba mengimpor modul dari direktori tertentu.

Masalahnya adalah bahwa jika saya gunakan sys.path.append(mod_directory)untuk menambahkan path dan kemudian membuka interpreter python, direktori mod_directoryakan ditambahkan ke akhir daftar sys.path. Jika saya mengekspor PYTHONPATHvariabel sebelum membuka interpreter python, direktori akan ditambahkan ke awal daftar. Dalam kasus terakhir saya dapat mengimpor modul tetapi dalam yang pertama, saya tidak bisa.

Adakah yang bisa menjelaskan mengapa ini terjadi dan memberi saya solusi untuk menambahkannya mod_directoryke awal, di dalam skrip python?


Saya sudah mencoba sitemodul .
Zeinab Abbasimazar

Jawaban:


178

Ini berfungsi seperti yang didokumentasikan. Setiap jalur yang ditentukan PYTHONPATHdidokumentasikan sebagai biasanya datang setelah direktori kerja tetapi sebelum jalur standar yang disediakan juru bahasa. sys.path.append()ditambahkan ke jalur yang ada. Lihat di sini dan di sini . Jika Anda ingin direktori tertentu didahulukan, cukup masukkan di kepala sys.path:

import sys
sys.path.insert(0,'/path/to/mod_directory')

Karena itu, biasanya ada cara yang lebih baik untuk mengelola impor daripada menggunakan PYTHONPATHatau memanipulasi sys.pathsecara langsung. Lihat, misalnya, jawaban untuk pertanyaan ini .


Terima kasih balasannya. Masalahnya adalah bahwa saya tidak menyadari bahwa untuk menambahkan modul yang dikemas sebagai file .egg Anda harus memasukkan nama file bukan hanya direktori di python 2.6
UnadulteratedImagination

2
Hei teman, ini mematahkan django saya. Apakah Anda yakin ingin memberi tahu orang lain untuk menaruhnya di atas?!? !!?
R Claven

16
@RClaven, maaf, sulit untuk mengatakan tindakan dan hasil apa yang Anda maksudkan: "letakkan di bagian atas" dan "patahkan django saya" tidak terlalu tepat. Bisakah Anda menguraikan?
Ned Deily

Untuk selengkapnya tentang cara kerja sys.path, lihat jawaban ini stackoverflow.com/a/38403654/850326
djhaskin987

2
Anda benar-benar harus menggunakan "1" bukannya "0"! Kalau tidak, Anda merusak sys.path . Lihat juga stackoverflow.com/q/10095037/125507 .
kadee


6

Bagi saya, saya perlu caffe ke jalur python saya. Saya bisa menambahkan jalurnya ke file /home/xy/.bashrcdengan menambahkan

export PYTHONPATH=/home/xy/caffe-master/python:$PYTHONPATH.

ke /home/xy/.bashrcfile saya .

Tetapi ketika saya menggunakan pycharm, jalan masih belum masuk.

Jadi saya bisa menambahkan path ke PYTHONPATHvariabel, dengan menjalankan -> edit Konfigurasi.

masukkan deskripsi gambar di sini


Yang paling sederhana adalah jawaban terbaik, tambahkan ini untuk pengembangan akan membuat autocomplete berfungsi
Gang

Saya telah memperbarui .bashrc seperti yang dijelaskan di atas tetapi tidak tercermin dalam jupyter notebook. Notebook Jupyter masih mengatakan modul tidak ditemukan.
Athar

3

Mengubah dir untuk sementara berfungsi dengan baik untuk mengimpor:

cwd = os.getcwd()
os.chdir(<module_path>)
import <module>
os.chdir(cwd)

0

Saat menjalankan skrip Python dari Powershell di Windows, ini seharusnya berfungsi:

$pathToSourceRoot = "C:/Users/Steve/YourCode"
$env:PYTHONPATH = "$($pathToSourceRoot);$($pathToSourceRoot)/subdirs_if_required"

# Now run the actual script
python your_script.py
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.