Trên hệ thống của tôi, tôi có nhiều mô-đun được cài đặt nhiều lần. Để đưa ra ví dụ, numpy 1.6.1
được cài đặt trong đường dẫn tiêu chuẩn tại /usr/lib/python2.7/dist-packages
và tôi có phiên bản cập nhật của numpy 1.8.0
được cài đặt tại /local/python/lib/python2.7/site-packages/
.Python: chọn một trong nhiều phiên bản mô-đun đã cài đặt
Lý do tôi không thể xóa phiên bản cũ là tôi không có quyền thay đổi bất kỳ thứ gì trên máy tính công việc của mình. Tuy nhiên tôi cần phải sử dụng phiên bản numpy mới.
Tôi đã thêm /local/python/lib/python2.7/site-packages/
vào số PYTHONPATH
của mình. Thật không may, điều này không hữu ích, vì /usr/lib/python2.7/dist-packages
được chèn vào đường dẫn trước tiên và do đó, numpy 1.6.1
sẽ được tải. Dưới đây là một ví dụ:
>>> import os
>>> print os.environ['PYTHONPATH']
/local/python/lib/python2.7/site-packages
>>> import pprint
>>> import sys
>>> pprint.pprint(sys.path)
['',
'/local/python/lib/python2.7/site-packages/matplotlib-1.3.1-py2.7-linux-x86_64.egg',
'/local/python/lib/python2.7/site-packages/pyparsing-2.0.1-py2.7.egg',
'~/.local/lib/python2.7/site-packages/setuptools-3.4.4-py2.7.egg',
'~/.local/lib/python2.7/site-packages/mpldatacursor-0.5_dev-py2.7.egg',
'/usr/lib/python2.7/dist-packages',
'/local/python/lib/python2.7/site-packages',
'/usr/lib/python2.7',
...,
'~/.local/lib/python2.7/dist-packages',
...]
Vì vậy, có vẻ như rằng thứ tự nhập khẩu là
- thư mục hiện
- trứng từ
PYTHONPATH
- trứng từ con đường mô-đun địa phương (
~/.local/lib/python2.7/site-packages/*.egg
) - hệ thống- đường dẫn mô-đun rộng (
~/usr/lib/python2.7/dist-packages/
) - thư mục từ
PYTHONPATH
- con đường trung gian (bỏ qua cho ngắn gọn)
- thư mục userbase (
~/.local/lib/python2.7/site-packages/
)
Vấn đề của tôi là tôi sẽ cần phải đặt mục 5. trước mục 3. và 4. cho mã của tôi để làm việc đúng cách . Ngay bây giờ, nếu tôi nhập một mô-đun được biên dịch theo số numpy 1.8.0
từ thư mục /local/*
và mô-đun này sẽ nhập gọn gàng, thì nó vẫn sẽ mất một phần từ thư mục /usr/*
và không thành công.
Tôi đã phá vỡ vấn đề này bằng cách đặt một cái gì đó như thế này trong kịch bản của tôi:
import sys
sys.path.insert(0, '/local/python/lib/python2.7/site-packages/')
Qua đó tôi có thể buộc Python sử dụng để nhập khẩu đúng, nhưng tất nhiên đây không phải là một giải pháp, vì tôi sẽ phải để làm điều này trong mỗi tập lệnh.
Không ai có ý tưởng hoặc có vấn đề với câu hỏi của tôi không? Bất kỳ trợ giúp được đánh giá cao. – Jenny
Giải pháp thực sự cho vấn đề của bạn là [bản sao các mô-đun Python của riêng bạn] (https://docs.python.org/2/install/index.html#alternate-installation). –
Tôi không thực sự thấy điều này sẽ hữu ích như thế nào, vì các mô-đun từ cơ sở người dùng được nhập * sau * các mô-đun của cơ sở dữ liệu từ cơ sở toàn cầu. Tôi đã cập nhật câu hỏi của mình cho sự rõ ràng. – Jenny