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?

Imajinasi yang tidak dicampurkan
sumber
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 .

Ned Deily
sumber
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
9

Anda bisa menggunakan:

import os
path = 'the path you want'
os.environ['PATH'] += ':'+path
Δημητρης Παππάς
sumber
kamu membutuhkan ';' di jendela.
sanjivgupta
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

Jayhello
sumber
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)
pengguna3517603
sumber
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
Alexander Pacha
sumber