Bất cứ khi nào tôi sử dụng sys.path.append
, thư mục mới sẽ được thêm vào. Tuy nhiên, một khi tôi đóng python, danh sách sẽ trở lại các giá trị (mặc định?) Trước đó. Làm thế nào để tôi vĩnh viễn thêm một thư mục vào PYTHONPATH
?
Bất cứ khi nào tôi sử dụng sys.path.append
, thư mục mới sẽ được thêm vào. Tuy nhiên, một khi tôi đóng python, danh sách sẽ trở lại các giá trị (mặc định?) Trước đó. Làm thế nào để tôi vĩnh viễn thêm một thư mục vào PYTHONPATH
?
Câu trả lời:
Bạn cần thêm thư mục mới của mình vào biến môi trường PYTHONPATH
, được phân tách bằng dấu hai chấm từ nội dung trước đó. Trong bất kỳ dạng Unix nào, bạn có thể thực hiện điều đó trong tập lệnh khởi động phù hợp với bất kỳ shell nào bạn đang sử dụng ( .profile
hoặc bất cứ thứ gì, tùy thuộc vào shell yêu thích của bạn) với một lệnh, một lần nữa, tùy thuộc vào shell được đề cập; trong Windows, bạn có thể làm điều đó thông qua GUI hệ thống cho mục đích này.
superuser.com
có thể là một nơi tốt hơn để hỏi thêm, tức là để biết thêm chi tiết nếu bạn cần chi tiết cụ thể về cách làm phong phú một biến môi trường trong nền tảng và vỏ được chọn của bạn, vì đó không thực sự là một câu hỏi lập trình.
Nếu bạn đang sử dụng bash (trên bản phân phối Mac hoặc GNU / Linux), hãy thêm phần này vào ~/.bashrc
export PYTHONPATH="${PYTHONPATH}:/my/other/path"
~/.bashrc
sau đó chạy source ~/.bashrc
xem stackoverflow.com/questions/2518127/
sudo su
vào đầu tệp .bashrc của bạn. Bài đăng này đồng ý với tôi. Trên hệ thống của tôi, ít nhất, nó thậm chí không cần thiết.
Thay vì thao tác, PYTHONPATH
bạn cũng có thể tạo một tệp cấu hình đường dẫn . Trước tiên hãy tìm trong thư mục Python tìm kiếm thông tin này:
python -m site --user-site
Vì một số lý do, điều này dường như không hoạt động trong Python 2.7. Ở đó bạn có thể sử dụng:
python -c 'import site; site._script()' --user-site
Sau đó tạo một .pth
tệp trong thư mục đó chứa đường dẫn bạn muốn thêm (tạo thư mục nếu nó không tồn tại).
Ví dụ:
# 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
và (create the directory if it doesn't exist)
các bộ phận là những gì tôi đã thiếu để làm cho nó hoạt động.
somelib.pth
không? Nếu không, bất kỳ dự đoán tại sao điều này có thể không hoạt động?
Điều này hoạt động trên Windows
Sau đó, bạn sẽ có thể thấy tất cả các mô-đun trong các đường dẫn đó từ tập lệnh của mình.
Trong trường hợp bất cứ ai vẫn còn bối rối - nếu bạn đang sử dụng máy Mac, hãy làm như sau:
open .bash_profile
export PYTHONPATH=$PYTHONPATH:foo/bar
export
chìa khóa là thứ mà tôi đã thiếu !!!!, được nâng cấp, cảm ơn rất nhiều!
Bạn có thể thêm đường dẫn qua tệp pythonrc, mặc định là ~ / .pythonrc trên linux. I E.
import sys
sys.path.append('/path/to/dir')
Bạn cũng có thể đặt PYTHONPATH
biến môi trường, trong tệp RC toàn cầu, chẳng hạn như ~/.profile
trên mac hoặc linux hoặc thông qua Bảng điều khiển -> Hệ thống -> tab Nâng cao -> Biến môi trường trên các cửa sổ.
Để giải thích thêm một chút, Python sẽ tự động xây dựng các đường dẫn tìm kiếm của nó (như đã đề cập ở trên và ở đây ) bằng cách sử dụng site.py
tập lệnh (thường nằm trong sys.prefix + lib/python<version>/site-packages
cũng như lib/site-python
). Người ta có thể có được giá trị của sys.prefix:
python -c 'import sys; print(sys.prefix)'
Các kịch bản site.py sau đó bổ sung thêm một số thư mục, phụ thuộc vào nền tảng này, chẳng hạn như /usr/{lib,share}/python<version>/dist-packages
, /usr/local/lib/python<version>/dist-packages
để con đường tìm kiếm và cũng có thể tìm kiếm trên các con đường để <package>.pth
cấu hình các file có chứa đường dẫn tìm kiếm bổ sung cụ thể. Ví dụ , cài đặt dễ dàng duy trì bộ sưu tập các gói đã cài đặt được thêm vào một tệp cụ thể của hệ thống, ví dụ như trên Ubuntu /usr/local/lib/python2.7/dist-packages/easy-install.pth
. Trên một hệ thống điển hình, có một loạt các tệp .pth xung quanh có thể giải thích một số đường dẫn không mong muốn trong sys.path:
python -c 'import sys; print(sys.path)'
Vì vậy, người ta có thể tạo một tệp .pth và đặt vào bất kỳ thư mục nào trong số này (bao gồm cả sitedir như đã đề cập ở trên ). Đây dường như là cách mà hầu hết các gói được thêm vào sys.path trái ngược với việc sử dụng PYTHONPATH.
Lưu ý: Trên OSX có một đường dẫn tìm kiếm bổ sung đặc biệt được thêm bởi site.py cho 'khung xây dựng' (nhưng dường như hoạt động đối với việc sử dụng python dòng lệnh thông thường): /Library/Python/<version>/site-packages
(ví dụ: Python2.7 :) /Library/Python/2.7/site-packages/
là nơi các gói bên thứ 3 được cho là để được cài đặt (xem README trong thư mục đó). Vì vậy, người ta có thể thêm một tập tin cấu hình đường dẫn trong đó có chứa đường dẫn tìm kiếm bổ sung ví dụ như tạo ra một tập tin gọi là /Library/Python/2.7/site-packages/pip-usr-local.pth
chứa /usr/local/lib/python2.7/site-packages/
và sau đó hệ thống sẽ python thêm rằng con đường tìm kiếm.
Đối với tôi nó hoạt động khi tôi thay đổi .bash_profile
tập tin. Chỉ thay đổi .bashrc
tập tin chỉ hoạt động cho đến khi tôi khởi động lại shell.
Đối với python 2.7, nó sẽ trông giống như:
export PYTHONPATH="$PYTHONPATH:/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python"
ở cuối .bash_profile
tập tin
Thêm export PYTHONPATH="${PYTHONPATH}:/my/other/path"
vào ~ / .bashrc có thể không hoạt động nếu PYTHONPATH
hiện không tồn tại (vì :
).
export PYTHONPATH="/my/other/path1"
export PYTHONPATH="${PYTHONPATH}:/my/other/path2"
Thêm phần trên vào ~ / .bashrc đã giúp tôi trên Ubuntu 16.04
echo PYTHONPATH
và không có gì xuất hiện! điều đó có nghĩa là PYTHONPATH này chưa được khởi tạo, vì vậy tôi chỉ cần dán dòng này export PYTHONPATH=$PYTHONPATH:<PATH_TO_TF>/TensorFlow/models/research/object_detection
vào ~/.bashrc
tệp của mình và source ~/.bashrc
nó. Sau này, khi tôi thực hiện 'echo $ PYTHONPATH`, nó đã cho tôi :<PATH_TO_TF>/TensorFlow/models/research/object_detection
, Có gợi ý nào về việc tôi đã làm gì sai không?
export PYTHONPATH=<PATH_TO_TF>/TensorFlow/models/research/object_detection
, khi bạn xuất PYTHONPATH lần đầu tiên, bạn phải làm điều đó mà không có ${PYTHONPATH}:
phần
:<PATH_TO_TF>/TensorFlow/models/research/object_detection
và xóa thứ 2 export PYTHONPATH=$PYTHONPATH:/TensorFlow/models/research/slim
. Bất kỳ đề nghị về điều đó, làm thế nào để khắc phục nó?
Việc thêm một đường dẫn mới vào PYTHONPATH đang thực hiện thủ công bằng cách:
thêm đường dẫn vào hồ sơ ~ / .bashrc của bạn, trong terminal bằng:
vim ~/.bashrc
dán sau đây vào hồ sơ của bạn
export PYTHONPATH="${PYTHONPATH}:/User/johndoe/pythonModule"
sau đó, hãy đảm bảo nguồn hồ sơ bashrc của bạn khi bạn chạy mã trong thiết bị đầu cuối:
source ~/.bashrc
Hi vọng điêu nay co ich.
Tôi đã thêm vĩnh viễn trong Windows Vista, Python 3.5
Hệ thống> Bảng điều khiển> Cài đặt hệ thống nâng cao> Nâng cao (nhấn) Biến môi trường> Biến hệ thống> (nếu bạn không thấy PYTHONPATH trong cột Biến) (nhấp) Mới> Tên biến: PYTHONPATH> Giá trị biến:
Xin vui lòng, viết thư mục trong giá trị biến. Đó là chi tiết câu trả lời của Blue Peppers.
Kịch bản bên dưới hoạt động trên tất cả các nền tảng vì nó là Python thuần túy. Nó sử dụng Đường dẫn pathlib, được ghi lại ở đây https://docs.python.org/3/l Library / pathlib.html , để làm cho nó hoạt động đa nền tảng. Bạn chạy nó một lần, khởi động lại kernel và đó là nó. Lấy cảm hứng từ 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))
Đây là một bản cập nhật cho chủ đề này có một số câu trả lời cũ.
Đối với những người sử dụng MAC-OS Catalina hoặc một số mới hơn (> = 10.15), nó đã được giới thiệu một Terminal mới có tên zsh
(thay thế cho cái cũ bash
).
Tôi đã gặp một số vấn đề với các câu trả lời ở trên do thay đổi này và tôi đã phần nào khắc phục bằng cách tạo tệp ~/.zshrc
và dán thư mục tệp vào $PATH
và$PYTHONPATH
Vì vậy, đầu tiên tôi đã làm:
nano ~/.zshrc
Khi trình soạn thảo mở, tôi dán nội dung sau:
export PATH="${PATH}:/Users/caio.hc.oliveira/Library/Python/3.7/bin"
export PYTHONPATH="${PYTHONPATH}:/Users/caio.hc.oliveira/Library/Python/3.7/bin"
lưu nó và khởi động lại thiết bị đầu cuối.
QUAN TRỌNG: Đường dẫn trên được đặt thành đường dẫn máy tính của tôi, bạn sẽ phải điều chỉnh nó với con trăn của mình.
Trong Python 3.6.4, bạn có thể duy trì sys.path qua các phiên python như thế này:
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))
Tôi thực sự khuyên bạn nên sử dụng virtualenv và virtualenvwrapper nếu không bạn sẽ làm lộn xộn đường dẫn của mình