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 ( .profile
atau 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"
~/.bashrc
lalu jalankan, source ~/.bashrc
lihat stackoverflow.com/questions/2518127/…
sudo su
di awal file .bashrc Anda. Posting ini setuju dengan saya. Di sistem saya, setidaknya, itu bahkan tidak perlu.
Alih-alih memanipulasi PYTHONPATH
Anda 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 .pth
file 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-site
dan (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_profile
export PYTHONPATH=$PYTHONPATH:foo/bar
export
kuncinya 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 PYTHONPATH
variabel lingkungan, dalam file rc global, seperti ~/.profile
pada 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.py
skrip (biasanya terletak di sys.prefix + lib/python<version>/site-packages
juga 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-packages
ke jalur pencarian dan juga mencari jalur ini untuk <package>.pth
file 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.pth
yang 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_profile
file. Hanya mengubah .bashrc
file 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_profile
file.
Menambahkan export PYTHONPATH="${PYTHONPATH}:/my/other/path"
ke ~ / .bashrc mungkin tidak berfungsi jika PYTHONPATH
saat 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 PYTHONPATH
dan 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_detection
di ~/.bashrc
file 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_detection
dan 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 ~/.zshrc
dan menempelkan direktori file ke $PATH
dan$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