2010-08-04 35 views
220

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, khi tôi đóng python, danh sách sẽ hoàn nguyên về giá trị trước đó (mặc định?). Làm cách nào để thêm vĩnh viễn một thư mục vào PYTHONPATH?Vĩnh viễn thêm thư mục vào PYTHONPATH

Trả lời

93

Bạn cần phải thêm thư mục mới của bạn vào biến môi trường PYTHONPATH, cách nhau bằng dấu hai chấm từ các nội dung trước đó. Trong bất kỳ hình thức Unix nào, bạn có thể làm điều đó trong một kịch bản khởi động thích hợp với bất kỳ trình bao nào bạn đang sử dụng (.profile hoặc bất cứ điều gì, tùy thuộc vào trình bao yêu thích của bạn). trong Windows, bạn có thể thực hiện nó thông qua GUI hệ thống cho mục đích này.

superuser.com có thể là nơi tốt hơn để hỏi thêm, tức là bạn cần biết thêm chi tiết về cách làm phong phú biến môi trường trong nền tảng và vỏ đã chọn của bạn, vì nó không thực sự là câu hỏi lập trình.

+7

Errata: Dấu phân cách trên cửa sổ sẽ là dấu chấm phẩy. Nếu bạn cần ghi đè đường dẫn hệ thống trên cửa sổ, cài đặt qua giao diện GUI dưới dạng biến môi trường người dùng có thể không Trong trường hợp này, bạn cần phải sử dụng tập lệnh khởi động để thực hiện các điều chỉnh cần thiết. –

+0

@Nathan, tx cho lời nhắc trên dấu chấm phẩy, nhưng (nếu bạn là quản trị viên tất nhiên) bạn _can_ đặt ** hệ thống ** env.vars trên cửa sổ (cộng với, OP không hỏi làm thế nào để ** ghi đè ** đường dẫn, chỉ cần làm thế nào để ** nối thêm ** vào nó, do đó, một người dùng env .var cũng sẽ tốt cho điều đó! -) –

+0

tiếc là tôi không phải là quản trị viên trên máy tính của tôi, vì vậy tôi phải sử dụng các biện pháp như vậy. :( –

309

Nếu bạn đang sử dụng bash (trên máy Mac hoặc distro GNU/Linux), thêm video này vào bạn ~/.bashrc

export PYTHONPATH="${PYTHONPATH}:/my/other/path" 
+18

Điều này hoàn toàn phù hợp với tôi, nhưng đảm bảo thư mục bạn trỏ đến có ở tệp trên cùng __init__.py cấu trúc rectory. Điều này không hoàn toàn rõ ràng với tôi lúc đầu. Ví dụ, tôi đã thử ** xuất PYTHONPATH = $ PYTHONPATH:/Users/joey/repos ** nhưng nó không hoạt động vì thư mục repos của tôi không có \ __ init__.py. Đi xuống một thư mục nữa: **/Users/joey/repos/specificRepo ** đã thực hiện thủ thuật. Bây giờ python có thể đi qua bất kỳ thư mục hướng xuống nào được kết nối với thư mục specificRepo chứa __init__.py! –

+2

điều này làm việc cho tôi nhưng bạn có thể giải thích vị trí của biến PYTHONPATH này không? và làm thế nào để "xuất khẩu PYTHONPATH" biết để xác định vị trí tập tin chính xác đó? – appleLover

+31

nhớ sau khi bạn chỉnh sửa '' ~/.bashrc'' rồi chạy '' source ~/.bashrc'' xem http://stackoverflow.com/questions/2518127/how-do-i-reload-bashrc-without-logging -out-and-back-in –

17

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ể thiết lập các biến PYTHONPATH môi trường, trong một file rc toàn cầu, chẳng hạn ~/.profile trên Mac hoặc Linux, hoặc thông qua Control Panel -> System -> Advanced tab -> Environment Variables trên cửa sổ.

+31

sys.path.append ('/ path/to/dir ') không thêm vĩnh viễn mục nhập. – jeremyjjbrown

5

Chỉ cần thêm về câu trả lời awesomo, bạn cũng có thể thêm dòng đó vào bạn ~/.bash_profile hoặc ~/.profile

+0

Thêm vào '.bash_profile' nếu bạn sử dụng shell đăng nhập, nếu không sử dụng' .profile' – smac89

64

Thay vì thao tác PYTHONPATH bạn cũng có thể tạo ra một path configuration file. Đầu tiên hãy tìm hiểu xem thư mục Python nào tìm kiếm thông tin này:

python -m site --user-site 

Vì một lý do nào đó 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 file .pth trong thư mục đó chứa đường dẫn mà 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" 
+0

Tôi đã thử bằng cách sử dụng Python 2.6 và nó dường như không hoạt động đối với tôi –

+3

Tôi vừa liên kết thư mục này với thư mục và thư viện của riêng tôi tất cả các kịch bản của tôi ở đó. Làm việc tốt. – firesofmay

+0

Đã giải quyết để thử lại sau khi tìm chủ đề này một lần nữa và quản lý để làm cho nó hoạt động như trên thời gian này! Lời bình chọn lên trên và bình chọn :) –

19

Trong trường hợp bất cứ ai vẫn còn bối rối - nếu bạn đang ở trên một máy Mac, làm như sau:

  1. Mở Terminal Loại
  2. open .bash_profile
  3. Trong tệp văn bản bật lên, thêm dòng này vào cuối: export PYTHONPATH=$PYTHONPATH:foo/bar
  4. Lưu tệp, khởi động lại Thiết bị đầu cuối và bạn đã hoàn tất
8

Trên linux, bạn có thể tạo liên kết tượng trưng từ gói của mình đến thư mục PYTHONPATH mà không phải xử lý các biến môi trường.Một cái gì đó như:

ln -s /your/path /usr/lib/pymodules/python2.7/ 
8

Đối với tôi, nó hoạt động khi tôi thay đổi tệp .bash_profile. Chỉ cần thay đổi .bashrc tập tin chỉ làm việc cho đến khi tôi khởi động lại trình bao.

Đối với python 2.7 nó sẽ giống như thế:

export PYTHONPATH="$PYTHONPATH:/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python" 

vào cuối của tập tin .bash_profile.

20

này hoạt động trên Windows

  1. Trên Windows, với Python 2.7 đi vào thư mục cài đặt Python.
  2. Mở Lib/trang web-gói.
  3. Thêm tệp empty.pth trống vào thư mục này.
  4. Thêm đường dẫn cần thiết vào tệp, mỗi đường cho mỗi tệp.

Sau đó, bạn sẽ có thể xem tất cả các mô-đun trong các đường dẫn đó từ tập lệnh của mình.

+2

IMO, đây là giải pháp tốt nhất, vì nó không phụ thuộc vào lựa chọn vỏ hoặc môi trường làm việc. Hoạt động trên linux là tốt, nơi con đường mặc định python là "/usr/local/lib/pythonX.Y/site-packages". Nếu điều đó không có tác dụng, hãy thử đặt tệp .pth của bạn vào thư mục dist-packages. – matus

6

Để cung cấp lời giải thích thêm một chút, Python sẽ tự động xây dựng con đường tìm kiếm của nó (như đã đề cập abovehere) sử dụng site.py kịch bản (thường nằm ở 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)' 

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 vào đường dẫn tìm kiếm và cũng tìm kiếm những con đường cho các tệp cấu hình <package>.pth chứa các đường dẫn tìm kiếm bổ sung cụ thể. Ví dụ: dễ cài đặt duy trì bộ sưu tập các gói đã cài đặt được thêm vào tệp cụ thể của hệ thống, ví dụ: trên Ubuntu là /usr/local/lib/python2.7/dist-packages/easy-install.pth. Trên một hệ thống điển hình có một bó của những tập tin .pth xung quanh đó có thể giải thích một số đường dẫn bất ngờ trong sys.path:

python -c 'import sys; print(sys.path)' 

Vì vậy, người ta có thể tạo một file .pth và đặt trong bất kỳ các thư mục (bao gồm cả sitedir như đã đề cập above). Điều này dường như là cách mà hầu hết các gói được thêm vào sys.path như 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 vào bởi site.py cho 'xây dựng khung công tác' (nhưng dường như hoạt động cho việc sử dụng dòng lệnh bình thường của python): /Library/Python/<version>/site-packages (ví dụ: Python2.7: /Library/Python/2.7/site-packages/) nơi mà các gói bên thứ 3 được cho là sẽ được cài đặt (xem README trong thư mục đó). Vì vậy, người ta có thể thêm tệp cấu hình đường dẫn trong đó có chứa các đường dẫn tìm kiếm bổ sung, ví dụ: tạo một tệp có tên là /Library/Python/2.7/site-packages/pip-usr-local.pth có chứa /usr/local/lib/python2.7/site-packages/ và sau đó hệ thống python sẽ thêm đường dẫn tìm kiếm đó.

+2

Đây là câu trả lời hay nhất của tất cả các giải pháp mà tôi đã tìm thấy. Xin vui lòng tăng lên. –

0

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:

Vui lòng, viết thư mục trong giá trị Biến. Đó là chi tiết về câu trả lời của Blue Peppers.

0

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 ở trên để tôi ~/.bashrc đã làm các trick cho tôi trên Ubuntu 16,04

0

Trong Python 3.6.4 bạn có thể tồn tại sys.path xuyên suốt các phiên trăn 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 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

Các vấn đề liên quan