Setiap kali saya menggunakan sys.path.append, direktori baru akan ditambahkan. Namun, setelah saya menutup python, daftar akan kembali ke nilai sebelumnya (default?). Bagaimana cara menambahkan direktori secara permanen PYTHONPATH?
Setiap kali saya menggunakan sys.path.append, direktori baru akan ditambahkan. Namun, setelah saya menutup python, daftar akan kembali ke nilai sebelumnya (default?). Bagaimana cara menambahkan direktori secara permanen PYTHONPATH?
Jawaban:
Anda perlu menambahkan direktori baru Anda ke variabel lingkungan PYTHONPATH, dipisahkan oleh titik dua dari konten sebelumnya. Dalam segala bentuk Unix, Anda dapat melakukannya dalam skrip startup yang sesuai dengan shell apa pun yang Anda gunakan ( .profileatau apa pun, tergantung pada shell favorit Anda) dengan perintah yang, sekali lagi, tergantung pada shell yang dimaksud; di Windows, Anda dapat melakukannya melalui sistem GUI untuk tujuan tersebut.
superuser.com mungkin merupakan tempat yang lebih baik untuk bertanya lebih lanjut, yaitu untuk rincian lebih lanjut jika Anda perlu spesifik tentang cara memperkaya variabel lingkungan di platform dan shell yang Anda pilih, karena itu sebenarnya bukan pertanyaan pemrograman.
Jika Anda menggunakan bash (pada distro Mac atau GNU / Linux), tambahkan ini ke ~/.bashrc
export PYTHONPATH="${PYTHONPATH}:/my/other/path"
~/.bashrclalu jalankan, source ~/.bashrclihat stackoverflow.com/questions/2518127/…
sudo sudi awal file .bashrc Anda. Posting ini setuju dengan saya. Di sistem saya, setidaknya, itu bahkan tidak perlu.
Alih-alih memanipulasi PYTHONPATHAnda juga dapat membuat file konfigurasi jalur . Pertama cari tahu di direktori mana Python mencari informasi ini:
python -m site --user-site
Untuk beberapa alasan ini sepertinya tidak berfungsi di Python 2.7. Di sana Anda dapat menggunakan:
python -c 'import site; site._script()' --user-site
Kemudian buat .pthfile di direktori yang berisi jalur yang ingin Anda tambahkan (buat direktori jika tidak ada).
Sebagai contoh:
# find directory
SITEDIR=$(python -m site --user-site)
# create if it doesn't exist
mkdir -p "$SITEDIR"
# create new .pth file with our path
echo "$HOME/foo/bar" > "$SITEDIR/somelib.pth"
python -m site --user-sitedan (create the directory if it doesn't exist)bagian adalah apa yang saya hilang untuk membuatnya bekerja.
somelib.pth? Jika tidak, ada tebakan mengapa ini tidak berhasil?
Ini berfungsi pada Windows
Kemudian Anda akan dapat melihat semua modul dalam jalur tersebut dari skrip Anda.
Jika ada yang masih bingung - jika Anda menggunakan Mac, lakukan hal berikut:
open .bash_profileexport PYTHONPATH=$PYTHONPATH:foo/barexportkuncinya adalah hal yang saya hilang !!!!, terangkat, terima kasih banyak!
Anda bisa menambahkan path melalui file pythonrc Anda, yang secara default adalah ~ / .pythonrc di linux. yaitu.
import sys
sys.path.append('/path/to/dir')
Anda juga dapat mengatur PYTHONPATHvariabel lingkungan, dalam file rc global, seperti ~/.profilepada mac atau linux, atau melalui Control Panel -> System -> tab Advanced -> Variabel Lingkungan di windows.
Untuk memberikan sedikit penjelasan, Python akan secara otomatis membangun jalur pencariannya (seperti yang disebutkan di atas dan di sini ) menggunakan site.pyskrip (biasanya terletak di sys.prefix + lib/python<version>/site-packagesjuga lib/site-python). Seseorang dapat memperoleh nilai sys.prefix:
python -c 'import sys; print(sys.prefix)'
Script site.py kemudian menambahkan sejumlah direktori, tergantung pada platform, seperti /usr/{lib,share}/python<version>/dist-packages, /usr/local/lib/python<version>/dist-packageske jalur pencarian dan juga mencari jalur ini untuk <package>.pthfile konfigurasi yang berisi jalur pencarian tambahan khusus. Misalnya instal mudah memelihara koleksi paket yang diinstal yang ditambahkan ke file sistem tertentu misalnya di Ubuntu itu /usr/local/lib/python2.7/dist-packages/easy-install.pth. Pada sistem tipikal ada banyak file .pth di sekitarnya yang dapat menjelaskan beberapa jalur tak terduga di sys.path:
python -c 'import sys; print(sys.path)'
Jadi seseorang dapat membuat file .pth dan memasukkan direktori ini (termasuk sitedir seperti yang disebutkan di atas ). Ini tampaknya menjadi cara sebagian besar paket ditambahkan ke sys.path daripada menggunakan PYTHONPATH.
Catatan: Di OSX ada jalur pencarian tambahan khusus yang ditambahkan oleh site.py untuk 'framework builds' (tetapi tampaknya berfungsi untuk penggunaan baris perintah normal dari python): /Library/Python/<version>/site-packages(misalnya untuk Python2.7:) /Library/Python/2.7/site-packages/yang merupakan tempat paket pihak ke-3 seharusnya digunakan untuk diinstal (lihat README di dir itu). Jadi seseorang dapat menambahkan file konfigurasi jalur di sana yang berisi jalur pencarian tambahan, misalnya membuat file bernama /Library/Python/2.7/site-packages/pip-usr-local.pthyang berisi /usr/local/lib/python2.7/site-packages/dan kemudian sistem python akan menambahkan path pencarian itu.
Bagi saya itu berfungsi ketika saya mengubah .bash_profilefile. Hanya mengubah .bashrcfile hanya berfungsi sampai saya me-restart shell.
Untuk python 2.7 akan terlihat seperti:
export PYTHONPATH="$PYTHONPATH:/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python"
di akhir .bash_profilefile.
Menambahkan export PYTHONPATH="${PYTHONPATH}:/my/other/path"ke ~ / .bashrc mungkin tidak berfungsi jika PYTHONPATHsaat ini tidak ada (karena :).
export PYTHONPATH="/my/other/path1"
export PYTHONPATH="${PYTHONPATH}:/my/other/path2"
Menambahkan hal di atas ke ~ / .bashrc saya berhasil di Ubuntu 16.04
echo PYTHONPATHdan tidak ada yang muncul! itu berarti PYTHONPATH ini belum diinisialisasi, jadi saya hanya menempelkan baris ini export PYTHONPATH=$PYTHONPATH:<PATH_TO_TF>/TensorFlow/models/research/object_detectiondi ~/.bashrcfile saya dan source ~/.bashrc itu. Kemudian, ketika saya melakukan `echo $ PYTHONPATH` itu memberi saya :<PATH_TO_TF>/TensorFlow/models/research/object_detection, Adakah saran jika saya telah melakukan sesuatu yang salah?
export PYTHONPATH=<PATH_TO_TF>/TensorFlow/models/research/object_detection, ketika Anda mengekspor PYTHONPATH untuk pertama kalinya Anda harus melakukannya tanpa ${PYTHONPATH}:bagian
:<PATH_TO_TF>/TensorFlow/models/research/object_detectiondan menghapus ke-2 export PYTHONPATH=$PYTHONPATH:/TensorFlow/models/research/slim. ada saran tentang itu, bagaimana cara memperbaikinya?
Menambahkan jalur baru ke PYTHONPATH dilakukan secara manual dengan:
menambahkan path ke profil ~ / .bashrc Anda, di terminal dengan:
vim ~/.bashrc
rekatkan yang berikut ke profil Anda
export PYTHONPATH="${PYTHONPATH}:/User/johndoe/pythonModule"
kemudian, pastikan untuk mencari sumber profil bashrc Anda ketika Anda menjalankan kode di terminal:
source ~/.bashrc
Semoga ini membantu.
Saya menambahkan secara permanen di Windows Vista, Python 3.5
Sistem> Panel Kontrol> Pengaturan sistem lanjutan> Lanjutan (ketuk) Variabel Lingkungan> Variabel sistem> (jika Anda tidak melihat PYTHONPATH di kolom Variabel) (klik) Baru> Nama variabel: PYTHONPATH> Nilai variabel:
Tolong, tulis direktori dalam nilai Variabel. Ini adalah detail dari jawaban Blue Peppers.
Script di bawah ini berfungsi pada semua platform karena ini adalah Python murni. Itu memanfaatkan PathLib path, didokumentasikan di sini https://docs.python.org/3/library/pathlib.html , untuk membuatnya bekerja lintas platform. Anda menjalankannya sekali, restart kernel dan hanya itu. Terinspirasi oleh https://medium.com/@arnaud.bertrand/modifying-python-s-search-path-with-pth-files-2a41a4143574 .
from pathlib import Path
to_add=Path(path_of_directory_to_add)
from sys import path
if str(to_add) not in path:
minLen=999999
for index,directory in enumerate(path):
if 'site-packages' in directory and len(directory)<=minLen:
minLen=len(directory)
stpi=index
pathSitePckgs=Path(path[stpi])
with open(str(pathSitePckgs/'current_machine_paths.pth'),'w') as pth_file:
pth_file.write(str(to_add))
Ini adalah pembaruan untuk utas ini yang memiliki beberapa jawaban lama.
Bagi mereka yang menggunakan MAC-OS Catalina atau yang lebih baru (> = 10.15), diperkenalkan Terminal baru bernama zsh(pengganti yang lama bash).
Saya punya beberapa masalah dengan jawaban di atas karena perubahan ini, dan saya agak melakukan solusi dengan membuat file ~/.zshrcdan menempelkan direktori file ke $PATHdan$PYTHONPATH
Jadi, pertama saya lakukan:
nano ~/.zshrc
Ketika editor dibuka, saya menempelkan konten berikut:
export PATH="${PATH}:/Users/caio.hc.oliveira/Library/Python/3.7/bin"
export PYTHONPATH="${PYTHONPATH}:/Users/caio.hc.oliveira/Library/Python/3.7/bin"
menyimpannya, dan me-restart terminal.
PENTING: Jalur di atas diatur ke jalur komputer saya, Anda harus menyesuaikannya dengan python Anda.
Dalam Python 3.6.4 Anda dapat bertahan sys.path di sesi python seperti ini:
import sys
import os
print(str(sys.path))
dir_path = os.path.dirname(os.path.realpath(__file__))
print(f"current working dir: {dir_path}")
root_dir = dir_path.replace("/util", '', 1)
print(f"root dir: {root_dir}")
sys.path.insert(0, root_dir)
print(str(sys.path))
Saya sangat menyarankan Anda menggunakan virtualenv dan virtualenvwrapper kalau tidak Anda akan mengacaukan jalan Anda