2013-02-04 45 views
33

Tôi đang gặp trục trặc khi xoắngói Python không cài đặt trong virtualenv sử dụng pip

pip --version 

pip 1.1 from /home/chris/GL/GLBackend/glenv/lib/python2.7/site-packages/pip-1.1-py2.7.egg (python 2.7)

Tạo một môi trường ảo

[email protected] ~/GL/GLBackend $ sudo virtualenv -p python2.7 glenv 

Running virtualenv with interpreter /usr/bin/python2.7 New python executable in glenv/bin/python2.7 Also creating executable in glenv/bin/python Installing distribute.............................................................................................................................................................................................done. Installing pip...............done.

Chỉ trong trường hợp Tôi sẽ e vững tất cả các quyền

[email protected] ~/GL/GLBackend $ sudo chmod -R 777 glenv 

[email protected] ~/GL/GLBackend $ source glenv/bin/activate 


(glenv)[email protected] ~/GL/GLBackend $ pip freeze 

argparse==1.2.1 distribute==0.6.24 wsgiref==0.1.2

xoắn không được liệt kê ở đây là cài đặt

(glenv)[email protected] ~/GL/GLBackend $ sudo pip install twisted 

Requirement already satisfied (use --upgrade to upgrade): twisted in /usr/local/lib/python2.7/dist-packages Requirement already satisfied (use --upgrade to upgrade): zope.interface>=3.6.0 in /usr/local/lib/python2.7/dist-packages (from twisted) Requirement already satisfied (use --upgrade to upgrade): distribute in /usr/local/lib/python2.7/dist-packages (from zope.interface>=3.6.0->twisted) Cleaning up... (glenv)[email protected] ~/GL/GLBackend $ pip uninstall twisted Cannot uninstall requirement twisted, not installed Storing complete log in /home/chris/.pip/pip.log

Nhưng khi tôi cài đặt nó nó nói rằng nó đã được cài đặt. Buộc cài đặt:

sudo pip install -I twisted 

Downloading/unpacking twisted Downloading Twisted-12.3.0.tar.bz2 (2.6Mb): 2.6Mb downloaded Running setup.py egg_info for package twisted . . .

Successfully installed twisted zope.interface distribute Cleaning up...

Tuy nhiên nó vẫn không được cài đặt

(glenv)[email protected] ~/GL/GLBackend $ pip freeze 

argparse==1.2.1 distribute==0.6.24 wsgiref==0.1.2

** Khi tôi cố gắng chạy script Python mà sử dụng xoắn, tôi nhận được một lỗi nói rằng xoắn không được cài đặt. Đó là:

ImportError: No module named twisted.python**

+0

Tại sao bạn sử dụng 'sudo' bằng' pip install' trong 'virtualenv'? Tôi không biết chắc chắn rằng 'pip' cố gắng cài đặt vào hệ thống (nghĩa là, đặt vẫn trong'/usr/local/lib/python2.7', như bạn thấy, thay vì '~/glenv ', như bạn muốn) khi bạn sử dụng' sudo', nhưng ít nhất cũng hợp lý. (Bạn cũng không nên sử dụng 'sudo' để tạo venv của mình ngay từ đầu.) – abarnert

+0

@abarnert đã trả lời bạn và dường như bạn đang gặp sự cố tương tự như http://stackoverflow.com/q/14665330/565999 –

Trả lời

54

Vấn đề ở đây là bạn đang sử dụng sudo khi bạn không nên như vậy. Và điều đó gây ra pip để cố gắng cài đặt vào /usr/local/lib thay vì ~/glenv/lib. (Và, bởi vì bạn đã sử dụng sudo, điều đó không thành công, nhưng điều đó không giúp bạn, bởi vì bạn không cho phép các gói trang web hệ thống trong venv của bạn.)

Có nhiều lý do khác nhau sudo pip có thể dẫn đến hành vi này Tuy nhiên, nhiều khả năng nhất là: Trên hầu hết các hệ thống (bao gồm các hộp Mac và RHEL/CentOS khác nhau mà tôi có quyền truy cập ngay), tệp sudoers sẽ đặt lại môi trường của bạn, sau đó thêm lại vào một số biến môi trường có trong danh sách cho phép. Điều này có nghĩa là khi bạn sudo pip, nó sẽ không thấy các biến môi trường mà virtualenv thiết lập, vì vậy nó sẽ quay trở lại để làm điều mặc định và cài đặt vào hệ thống Python của bạn, thay vì venv của bạn.

Nhưng thực sự, nó không quan trọng lý do tại sao điều này đang xảy ra. Câu trả lời là giống nhau: chỉ cần làm pip install thay vì sudo pip install.

Lưu ý rằng bạn cũng muốn loại bỏ các sudo trên virtualenv cuộc gọi, vì điều này có thể sẽ gây ra venv được thiết lập không đúng (đó là lý do tại sao bạn cần sudo chmod, trong đó sẽ không cần thiết khác). Toàn bộ điểm cài đặt mọi thứ trong thư mục chủ người dùng của bạn là bạn có thể thực hiện điều đó với quyền người dùng thông thường của mình.Bạn có thể muốn nâng cấp lên virtualenv/pip mới hơn, vì 1.8 và 1.2 có một số sửa lỗi và cải tiến. Nhưng tôi xác minh rằng tôi nhận được chính xác cùng một vấn đề như bạn thậm chí với phiên bản mới nhất (1.8.4 và 1.2.1), vì vậy tôi không nghĩ rằng đó là có liên quan ở đây.

+3

Nếu tôi muốn cài đặt 'virtualenv' trong thư mục'/opt' thì sao? Tôi nhận được một lỗi 'Bị từ chối '. –

+0

Cảm ơn rất nhiều :) –

+0

@Giri: bạn có thể tạo thư mục con bằng sudo, cấp quyền cho người dùng hoặc nhóm của bạn và sau đó thực hiện tất cả các công cụ ảo ở đó mà không có sudo. Nếu nó cho một người dùng bình thường, bạn có thể thích sử dụng homedir của họ mặc dù. – Mark

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