2013-04-28 62 views
5

Tôi đang cố sử dụng pip để cài đặt gói tại địa phương theo số ~/.local. Vấn đề là gói (trong phiên bản cũ) đã có sẵn trên toàn cầu trên hệ thống. Mặc dù thư mục gói python toàn cục là không phải trong số PYTHONPATH của tôi, pip vẫn từ chối cài đặt, nghĩ rằng yêu cầu gói được thỏa mãn. Đây là tương tự như vấn đề mô tả ở đây, ngoại trừ tôi không sử dụng sudo vì vậy giải pháp này không áp dụng: pip - Requirement already satisfied?sử dụng pip để cài đặt các gói tại địa phương mặc dù các yêu cầu toàn cầu hài lòng

Nếu tôi làm:

pip install --user numpy 

Nó nói:

Requirement already satisfied (use --upgrade to upgrade): numpy in /usr/local/lib/python2.7/dist-packages/numpy-1.6.2-py2.7-linux-x86_64.egg 

Tuy nhiên, /usr/local/lib/... không có trong số PYTHONPATH của tôi. Điều duy nhất trong PYTHONPATH~/.local.

Nếu tôi cố gắng làm:

pip install --user --upgrade numpy 

Nó tải về NumPy và biên dịch nó, và sau đó nghĩ rằng tôi đang làm một toàn cầu cài đặt mặc dù cờ --user và tôi nhận được:

Installing collected packages: numpy 
    Found existing installation: numpy 1.6.2 
    Uninstalling numpy: 
Exception: 
Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/dist-packages/pip-1.2.1-py2.7.egg/pip/basecommand.py", line 107, in main 
    status = self.run(options, args) 
    File "/usr/local/lib/python2.7/dist-packages/pip-1.2.1-py2.7.egg/pip/commands/install.py", line 261, in run 
    requirement_set.install(install_options, global_options) 
    File "/usr/local/lib/python2.7/dist-packages/pip-1.2.1-py2.7.egg/pip/req.py", line 1162, in install 
    requirement.uninstall(auto_confirm=True) 
    File "/usr/local/lib/python2.7/dist-packages/pip-1.2.1-py2.7.egg/pip/req.py", line 495, in uninstall 
    paths_to_remove.remove(auto_confirm) 
    File "/usr/local/lib/python2.7/dist-packages/pip-1.2.1-py2.7.egg/pip/req.py", line 1492, in remove 
    renames(path, new_path) 
    File "/usr/local/lib/python2.7/dist-packages/pip-1.2.1-py2.7.egg/pip/util.py", line 273, in renames 
    shutil.move(old, new) 
    File "/usr/lib/python2.7/shutil.py", line 300, in move 
    os.unlink(src) 
OSError: [Errno 13] Permission denied: '/usr/bin/f2py' 

Làm cách nào để khắc phục sự cố này? Tôi không chắc chắn lý do tại sao nó cố gắng làm bất cứ điều gì đòi hỏi quyền toàn cầu khi nó được thông qua cờ --user.

Có cách nào để yêu cầu pip chỉ sử dụng ~/.local và bỏ qua mọi thứ khác trên hệ thống? (Tôi không muốn sử dụng virtualenv Đó là không cần thiết ở đây, tôi không muốn nhiều môi trường, chỉ là một!).

+0

tại sao bạn không sử dụng 'virtualenv', đây không phải là lý do chính xác được tạo ra? – dm03514

+3

Numpy không hoạt động tốt với pip. Nó đang cố gắng cài đặt 'f2py' trên'/usr/bin/'. Có lẽ vì nó nằm ngoài 'site-packages' của python.Nhiều khả năng sẽ có các tệp khác phải được cài đặt bên ngoài đó và pip dường như không biết cách xử lý nó. Không chắc chắn nếu virtualenv sẽ giúp ở đây. – tiago

+0

@tiago * Numpy không chơi tốt với pip. Nó đang cố gắng để cài đặt f2py trên /usr/bin/.* Không, nó không. Đó là pip cố gắng để ** gỡ cài đặt ** hệ thống numpy mà không thành công do thiếu quyền truy cập. Xem câu trả lời của tôi. –

Trả lời

2

Citing Marcus Smith (duy trì pip):

Nếu bạn nghĩ rằng toàn cầu trang web này đã hết hạn, và muốn mới nhất trong các trang web của người dùng, sau đó sử dụng:
pip install --upgrade --user SomePackage

(...) gói (trong một phiên bản cũ) đã có sẵn trên toàn cầu về hệ thống bạn phải sử dụng tùy chọn --upgrade như trên nhận xét của Marcus. Gỡ cài đặt gói hệ thống gọn gàng có thể là lỗi trong phiên bản pip bạn sử dụng (1.2.1). Hãy thử phiên bản hiện tại nhiều vấn đề liên quan đến --user tùy chọn đã được cố định trong các phiên bản 1.3 và 1.4

EDIT

Marcus Smith points đến vấn đề cụ thể trong bình luận của ông sau này:

pip 1.3 có # 705, trong đó rất quan trọng để sử dụng --user và --upgrade cùng nhau.