2014-05-23 21 views
21

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à

  1. thư mục hiện
  2. trứng từ PYTHONPATH
  3. trứng từ con đường mô-đun địa phương (~/.local/lib/python2.7/site-packages/*.egg)
  4. hệ thống- đường dẫn mô-đun rộng (~/usr/lib/python2.7/dist-packages/)
  5. thư mục từ PYTHONPATH
  6. con đường trung gian (bỏ qua cho ngắn gọn)
  7. 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.

+0

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

+0

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). –

+0

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

Trả lời

6

Bên cạnh các đề xuất đã được đưa ra trong phần nhận xét, bạn có nghĩ đến việc sử dụng virtualenv không? Điều này sẽ cung cấp cho bạn quyền kiểm soát chi tiết trên mọi mô-đun mà bạn muốn sử dụng. Nếu bạn không quen thuộc với virtualenv bạn sẽ muốn đọc tài liệu để có được một cảm giác về cách nó hoạt động.

đơn thuần ví dụ, bạn có thể cài đặt và thiết lập nó, như vậy (virtualenv-1.11.6 looks là phiên bản mới nhất hiện nay):

$ curl -O https://pypi.python.org/packages/source/v/virtualenv/virtualenv-1.11.6.tar.gz 
$ tar xvfz virtualenv-1.11.6.tar.gz 
$ cd virtualenv-1.11.6 
$ python virtualenv.py ../numpyvenv 
$ cd ../numpyvenv 
$ source ./bin/activate 
(numpyvenv) $ pip install numpy 
# downloads, compiles, and installs numpy into the virtual environemnt 
(numpyvenv) $ python 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import numpy 
>>> numpy.version.version 
'1.9.1' 
>>> quit() 
(numpyvenv) $ deactivate 
$ # the virtual environment has been deactivated 

Ở trên, chúng tôi tạo ra một môi trường ảo có tên là " numpyvenv ", kích hoạt môi trường, được cài đặt gọn gàng, in phiên bản gọn gàng (để hiển thị nó hoạt động), bỏ python, và tắt môi trường. Lần tới khi bạn kích hoạt môi trường, sẽ có nhiều thứ cùng với bất kỳ mô-đun nào khác mà bạn cài đặt. Bạn có thể gặp trục trặc trong khi thử điều này, nhưng nó sẽ giúp bạn bắt đầu.

1

Tôi đã gặp sự cố tương tự trên Debian Wheezy sau khi cài đặt mô-đun gọn gàng mới nhất với easy_install.

Mô-đun gọn gàng mới được cài đặt trong /usr/local/lib/python2.7/dist-packages/numpy trong khi mô-đun cũ nằm trong /usr/lib/pymodules/python2.7/numpy. Khi tôi cố gắng nhập mô-đun numpy, phiên bản cũ hơn đã được nhập. Và như bạn nói, việc thêm vào PYTHONPATH đường dẫn mô-đun mới không hữu ích, vì được thêm vào trong sys.path bên dưới mục cũ hơn.

Sự cố có vẻ là ở easy-install, vì nó tạo tệp easy-install.pth nhập /usr/lib/pymodules/python2.7 trước bất kỳ mô-đun cục bộ nào.

Để khắc phục vấn đề Tôi chỉ chỉnh sửa ed file /usr/local/lib/python2.7/dist-packages/easy-install.pth và bình luận ed ra dòng /usr/lib/pymodules/python2.7 nên dòng này sẽ được đặt bên dưới trong sys.path.

2

Tôi gặp sự cố này trên máy Mac mà tôi đang sử dụng mà không cần quyền truy cập quản trị viên. Giải pháp của tôi là như sau:

  1. Tìm thư mục của phiên bản gọn gàng bạn muốn sử dụng. Đối với tôi đây là /Library/Python/2.7/site-packages

  2. Tạo một file ~/.startup.py và trỏ đến nó với PYTHONSTARTUP=~/.startup.py trong file .bashrc của bạn

  3. Trong .startup.py:

import sys

sys.path.insert(0,'/Library/Python/2.7/site-packages/') < --- nhập khẩu TRƯỚC KHI các bộ phận tiêu chuẩn

import numpy

print("Importing numpy version"+numpy.__version__) < ---- Để nhắc nhở rằng chúng ta đã thay đổi phiên bản numpy

Điều này dường như làm việc tốt cho tôi. Tôi hy vọng nó sẽ giúp.

+0

Đã không đọc câu hỏi gốc đúng cách để nhận ra rằng một phần giải pháp của tôi đã được đề xuất trong câu hỏi ban đầu, xin lỗi vì điều đó –

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