2012-03-29 30 views
6

Trong Python, tôi nhận được một lỗi bởi vì nó tải một mô-đun từ /usr/lib/python2.6/site-packages nhưng tôi muốn nó để sử dụng phiên bản của tôi trong $HOME/python-modules/lib/python2.6/site-packages, mà tôi đã cài đặt sử dụng pip-python --install-option="--prefix=$HOME/python-modules --ignore-installed

Làm thế nào tôi có thể nói Python sử dụng phiên bản của tôi thư viện? Đặt PYTHONPATH thành $HOME/python-modules/lib/python2.6/site-packages không có tác dụng, vì /usr/lib/... dường như được ưu tiên.

+2

có bạn đã cố gắng chỉ thêm vào trước đường dẫn đến các phiên bản của thư viện trước khi nhập khẩu? tức là 'sys nhập khẩu; sys.path.insert (0, "/ path/to/your/version"); import something' – bjarneh

+0

Tôi chưa bao giờ tự làm điều này, nhưng tôi nghĩ bạn có thể sử dụng hàm imp.find_module() và imp.load_module(). [Tài liệu] (http://docs.python.org/library/imp.html) – malbani

Trả lời

7

Hãy xem mô-đun site để biết cách tùy chỉnh môi trường của bạn. Một cách để thực hiện việc này là thêm tệp vào vị trí hiện tại trên sys.path được gọi là usercustomize.py, khi Python khởi động, nó sẽ tự động nhập tệp này và bạn có thể sử dụng tệp này để sửa đổi sys.path.

Đầu tiên, thiết lập $PYTHONPATH để $HOME (hoặc thêm $HOME nếu $PYTHONPATH có một giá trị), sau đó tạo ra các tập tin $HOME/usercustomize.py với các nội dung sau:

import sys, os 
my_site = os.path.join(os.environ['HOME'], 
         'python-modules/lib/python2.6/site-packages') 
sys.path.insert(0, my_site) 

Bây giờ khi bạn bắt đầu Python bạn sẽ thấy tùy chỉnh của bạn trang web- gói thư mục trước hệ thống mặc định trên sys.path.

7

phiên bản Python Mới hơn hiện nay đã được xây dựng-in hỗ trợ để tìm kiếm vị trí opendesktop:

$HOME/.local/lib/pythonX.Y/site-packages 

Nếu bạn đặt module địa phương của bạn đó bạn không cần phải bất kỳ thao tác sys.path.

1

Nếu có nhiều phiên bản của gói được cài đặt, ví dụ: Scipy:

>>> import scipy; print(scipy.__version__); print(scipy.__file__) 
0.17.0 
/usr/lib/python3/dist-packages/scipy/__init__.py 

và người ta sẽ thích phiên bản cài đặt người dùng (được cài đặt ví dụ sử dụng pip install --user --upgrade scipy) được ưa thích, người ta cần một tập tin usercustomize.py trong ~/.local/lib/python3.5/site-packages/ với ví dụ nội dung này:

import sys, os 
my_site = os.path.join(
    os.environ['HOME'], '.local/lib/python%d.%d/site-packages' % (
     sys.version_info[0], sys.version_info[1])) 
for idx, pth in enumerate(sys.path): 
    if pth.startswith('/usr'): 
     sys.path.insert(idx, my_site) 
     break 
else: 
    raise ValueError("No path starting with /usr in sys.path") 

(vòng lặp for chọn chỉ số đảm bảo rằng các gói cài đặt trong "phát triển chế độ" được ưu tiên) bây giờ chúng tôi có được phiên bản cụ thể người sử dụng của chúng ta về scipy:

>>> import scipy; print(scipy.__version__); print(scipy.__file__) 
0.18.1 
/home/user/.local/lib/python3.5/site-packages/scipy/__init__.py 
0

thích gói cài đặt để userbase (ví dụ pip install --user --upgrade cool_thing)

trong ~/.bashrc, ~/.profile, hoặc bất cứ file init cho vỏ của bạn, thêm

export PYTHONUSERBASE="$HOME/python-modules" 

trong $PYTHONUSERBASE/usercustomize.py

#!/usr/bin/env python 
import sys, site 
sys.path.insert(0, site.getusersitepackages()) 
Các vấn đề liên quan