PIP không cài đặt vào thư mục virtualenv


10

Tôi đang cố gắng cài đặt django vào một virtualenv đã tồn tại.

Theo các hướng dẫn được liệt kê trên trang web pip-install tại đây , tôi đã chạy các bước sau từ SSH.

name@server:~$ . myenv.env/bin/activate
(myenv.env)nam@server:~$ pip install django

Tuy nhiên, ở phần dưới cùng của cài đặt, tôi thấy điều này:

creating /usr/local/lib/python2.7/dist-packages/django

error: could not create '/usr/local/lib/python2.7/dist-packages/django': Permission denied

Có vẻ như nó đang cố gắng cài đặt nó vào thư mục toàn cầu. Tôi không có đặc quyền sudo. Tôi đang làm gì đó sai ở đây?

Cập nhật: $ PATH = /var/django/myenv.env/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games


Nó hoạt động chính xác cho các gói khác? Bạn có cùng một vấn đề nếu bạn sử dụng easy_install?
larsks

Vấn đề tương tự với các gói khác. Và tôi tin easy_install yêu cầu sudo và sẽ cài đặt vào thư mục toàn cầu.
Luke Sapan

Không, thiết lập virtualenv giúp bạn dễ dàng cài đặt cũng như pip. Bạn có thể nhập which easy_installđể xem nếu bạn đang sử dụng virtualenv hoặc hệ thống của bạn.
larsks

Trên thực tế, bạn có chắc là bạn đang chạy pip từ bên trong virtualenv? Làm những gì which pipnăng suất? Và bạn có thấy pipbên trong myenv.env/bin/không?
larsks

Tôi thấy pip bên trong myenv.env / bin /. Tôi vừa thử "kích hoạt" env của mình một lần nữa, và mặc dù ở chế độ đó, "pip" và "which easy_install" đều trả về "usr / local / bin / pip" và "usr / bin / easy_install".
Luke Sapan

Câu trả lời:


6

Xin lỗi vì trả lời trễ một năm! Tôi đã có cùng một vấn đề và đã sửa nó, tôi không biết nếu bạn thay đổi tên của một thư mục sau khi tạo môi trường ảo, tôi đã làm. Nếu vậy thì đây là những gì tôi đã làm.

1.) deactivatev-env của bạn. Sau khi sửa lỗi, bạn cần khởi động lại v-env, vì vậy có thể deactivatengay bây giờ. đúng?

2.) Bây giờ, vì chúng ta đã tạo v-env theo một đường dẫn khác, chúng ta phải thay đổi các biến đường dẫn tĩnh trong các tệp này.

Để làm cho pip hoạt động, bạn không cần phải làm điều này, nhưng tôi vẫn làm. bin/activate, bin/activate.csh, bin/activate.fish

bin/pip, bin/pip2, bin/pip2.7

bin/easy_install, bin/easy_install2.7

3.) Để làm cho pip hoạt động, bạn phải sửa trình thông dịch python trong tệp pip, điều này cũng có một vị trí trình thông dịch tĩnh được đặt bởi virtualenv trong quá trình tạo.

4.) Để easy_install hoạt động? Bạn đoán nó, sửa vị trí thông dịch viên.

Tôi hy vọng điều này sẽ giúp cho bất kỳ người nào đọc nó trong tương lai. Xin lỗi OP, vì đã đến muộn.


Vâng, đó chính xác là nó. Trong trường hợp của tôi, tôi đã có thể tạo lại virtualenv từ đầu và điều đó đã giải quyết nó.
Luke Sapan

Rất vui khi được giúp đỡ
Crispy

Tôi rất vui mừng khi cuối cùng đã tìm thấy một câu trả lời. Đối với tôi, sử dụng sed trong thư mục venv giúp công việc dễ dàng hơn rất nhiều. Một cái gì đó như grep -rli '/path/to/old/env/bin' * | xargs -i@ sed -i 's/\/path\/to\/old\/env\/bin/\/path\/to\/new\/env\/bin/g' @. nguồn
Keith

Bạn nói, "Để làm cho pip hoạt động, bạn phải sửa trình thông dịch python trong tệp pip", việc này được thực hiện ở đâu và như thế nào?
Dave

3

Tôi có vấn đề này như nhau.

Tôi đã xóa môi trường ảo và tạo một môi trường mới, giải quyết vấn đề.

Có lẽ không phải là câu trả lời mà bạn đang hy vọng, nhưng vì đó là câu duy nhất ...


1

Không có đặc quyền quản trị, bạn rất hạn chế về những gì bạn có thể làm. Nếu bạn không được phép nâng cao bản thân hoặc yêu cầu các đặc quyền, cách tốt nhất tôi tìm thấy đó là tạo một môi trường khác, tạo tệp yêu cầu, tải xuống tất cả các gói bạn cần cho máy của bạn (django) cũng được đặt trong tập tin yêu cầu của bạn và nó sẽ hoạt động.


0

Có cùng một vấn đề. Trong trường hợp của tôi, lý do là env ảo được tạo là cho python2.7 (mặc định) nhưng tôi đang sử dụng pip3 để cài đặt gói. Pip3 không có trong virtualenv của tôi nên nó được mặc định là toàn cầu. Đối với tôi, sửa chữa là sử dụng

virtualenv flask --python=python3

để tạo ra env.


0

Tôi đã gặp phải vấn đề tương tự do đổi tên người dùng. Câu trả lời của Crispy là hoàn toàn đúng. Và giải pháp của tôi có thể thuận tiện hơn.

setps:
1. Nhập đường dẫn bin của môi trường ảo của bạn, chẳng hạn như cd ~/virenv_dir/bin
2. Đổi tên tất cả các tệp trong thư mục này bằng lệnh sed.sed -i 's/old_name/new_name/' *


0

Trong trường hợp của tôi, tôi đã xác định hai bí danh (để khắc phục một số vấn đề khác trên phiên bản python mặc định):

alias pip='/usr/bin/pip3'
alias python='/usr/bin/python3'

Và điều này đã gây ra các triệu chứng tương tự:

[Errno 13] Permission denied: '/usr/lib/python3.6/site-packages'

Xóa các bí danh đã giải quyết vấn đề (trước hoặc sau khi tạo virtualenv)


0

Gọi sudo pipsẽ gọi pip toàn cầu và không pip trong virtualenv của bạn. Kích hoạt / Workon môi trường của bạn sau đó chỉ cần gọi pip, không sudo pip, điều này có thể khắc phục vấn đề của bạn, như nó đã làm của tôi.

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.