Làm cách nào để sửa đổi toàn cầu PYTHONPATH (sys.path) mặc định?


33

Trên hệ thống Ubuntu (10.10), tôi có gói Python tự cài đặt /usr/local/lib/python2.6/site-packages/. Điều này không có trong đường dẫn mặc định (sys.path). Làm thế nào để tôi thêm thư mục này vào đường dẫn?

Đặt $PYTHONPATHbiến môi trường là một giải pháp, tất nhiên, nhưng tôi đang tìm kiếm một cách thanh lịch hơn để làm điều này. Ví dụ, easy_installcũng đặt các gói đã cài đặt trong đó, sys.path của tôi trông giống như thế này:

['', '/usr/local/lib/python2.6/dist-packages/keyring-0.5.1-py2.6.egg', 
'/usr/lib/python2.6', '/usr/lib/python2.6/plat-linux2', '/usr/lib/python2.6/lib-tk',  
'/usr/lib/python2.6/lib-old', '/usr/lib/python2.6/lib-dynload', 
'/usr/local/lib/python2.6/dist-packages', '/usr/lib/python2.6/dist-packages', 
'/usr/lib/python2.6/dist-packages/PIL', '/usr/lib/pymodules/python2.6', 
'/usr/lib/pymodules/python2.6/gtk-2.0']

vì vậy, đường dẫn rõ ràng không phải là mặc định được tích hợp vào nhị phân Python.

Có một tập tin cấu hình duy nhất có chứa các mục ở trên không? Hoặc theo những cách nào có thể sửa đổi nó?

Câu trả lời:


27

Các module tài liệu trang webSửa Python của Tìm kiếm con đường dường như những gì bạn đang tìm kiếm.

Theo tôi hiểu, những mục đó đang được thêm vào sys.pathbởi:

  • /usr/lib/python2.6/site.py
  • /usr/lib/python2.6/dist-packages/site.py
    (Thay đổi 2.6 thành phiên bản Python của bạn.)

Cách dễ nhất để thay đổi nó là thêm một tập tin /usr/local/lib/python2.6/dist-packages/site-packages.pthchứa ../site-packages.

Ngoài ra, có lẽ bạn có thể dạy các gói để sử dụng site.getsitepackages()?


1
cảm ơn, hoạt động hoàn hảo :) (cuối cùng tôi đã thêm tệp .pth vào /usr/local/python2.6/dist-packages, có chứa "../site-packages")
Latanius

1
Bạn cũng có thể tạo một module gọi sitecustomize.pysite.pycố gắng để nhập khẩu và sửa đổi sys.pathđó.
TestUser16418

5

Bạn có thể tạo một tệp mới được gọi /etc/profile.d/local_python.shvới nội dung

PYTHONPATH="/usr/local/lib/python2.6/site-packages/":"${PYTHONPATH}"
export PYTHONPATH

Mà sẽ đặt PYTHONPATHbiến cho tất cả người dùng đã đăng nhập trên hệ thống của bạn.


7
Điều này thực sự không phải là phổ quát. Cơ chế /etc/profile.d sẽ chỉ hoạt động đối với shell đăng nhập cho những người có shell sử dụng /etc/profile.d (bash / ksh / zsh). Tôi chắc chắn người dùng csh sẽ không thấy sự thay đổi này. Ngoài ra, sẽ được bỏ qua trong cron / tại công việc.
Rich Homolka

2
đây là một cách hay để đặt các biến môi trường toàn cầu (một điều khác tôi đã học ngày hôm nay), nhưng như tôi đã đề cập trong bài đăng, tôi đang tìm kiếm một cách Pythonic hơn :)
Latanius

4

Tôi muốn tóm tắt những phát hiện của tôi về sửa đổi đường dẫn của python. Có hai cách để làm điều đó.

  • tập tin .pth
  • PYTHONPATH

Bất kỳ tệp .pth nào được tìm thấy trên đường dẫn mặc định (xem bên dưới) sẽ được đưa vào nội dung của nó sys.path. Định dạng của tệp .pth đã nói rất đơn giản: đường dẫn một (thư mục) trên mỗi dòng. Đáng ngạc nhiên, các đường dẫn có thể là tuyệt đối hoặc liên quan đến tệp .pth .

Đường dẫn mặc định là nơi trình thông dịch cư trú và <some-prefix>/lib/python<version>/site-packagesnơi <some-prefix>thường là /usr/.

PYTHONPATHlà biến môi trường của hệ điều hành của bạn. Trên hệ thống unix bạn liệt kê chúng theo env. Việc sửa đổi toàn cục các biến như vậy được thực hiện thông qua các tập lệnh .sh bên trong /etc/profile.d/thư mục như được đề cập bởi @ TestUser16418.


2
Đó là PYTHONPATH mà không có "_"
heroxbd

1

Ví dụ: nếu bạn muốn nhập sudsmô-đun có sẵn dưới dạng .eggtệp:

egg_path = '/home/shahid/suds_2.4.egg'

sys.path.append(egg_path)

import suds
# ... rest of code
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.