[英]pip on virtualenv is not installing packages in the right python environment
[英]Python packages not installing in virtualenv using pip
我在安裝 twisted 時遇到問題
pip --version
來自 /home/chris/GL/GLBackend/gleenv/lib/python2.7/site-packages/pip-1.1-py2.7.egg 的 pip 1.1(python 2.7)
創建虛擬環境
chris@chris-mint ~/GL/GLBackend $ sudo virtualenv -p python2.7 glenv
使用解釋器 /usr/bin/python2.7 運行 virtualenv 在 glenv/bin/python2.7 中新的 python 可執行文件還在 glenv/bin/python 中創建可執行文件 安裝分發...... ..................................................... ..................................................... ..................................................... .......................完畢。 安裝 pip……完成。
以防萬一,我將啟用所有權限
chris@chris-mint ~/GL/GLBackend $ sudo chmod -R 777 glenv
chris@chris-mint ~/GL/GLBackend $ source glenv/bin/activate
(glenv)chris@chris-mint ~/GL/GLBackend $ pip freeze
argparse==1.2.1 分發==0.6.24 wsgiref==0.1.2
twisted 未在此處列出為已安裝
(glenv)chris@chris-mint ~/GL/GLBackend $ sudo pip install twisted
已滿足要求(使用--upgrade 升級):扭曲在/usr/local/lib/python2.7/dist-packages 已滿足要求(使用--upgrade 升級):zope.interface>=3.6.0 in / usr/local/lib/python2.7/dist-packages (來自twisted) 要求已經滿足(使用--upgrade 升級):分發在/usr/local/lib/python2.7/dist-packages (來自zope.interface >=3.6.0->twisted) 清理... (glenv)chris@chris-mint ~/GL/GLBackend $ pip uninstall twisted 無法卸載要求 twisted,未安裝 存儲完整登錄 /home/chris/.pip/點子日志
但是當我安裝它時,它說它已經安裝了。 強制安裝:
sudo pip install -I twisted
下載/解壓twisted 下載Twisted-12.3.0.tar.bz2 (2.6Mb):下載2.6Mb 運行setup.py egg_info 以獲取twisted 包。 . .
成功安裝了twisted zope.interface 分發清理...
然而它仍然沒有安裝
(glenv)chris@chris-mint ~/GL/GLBackend $ pip freeze
argparse==1.2.1 分發==0.6.24 wsgiref==0.1.2
**當我嘗試運行使用 twisted 的 Python 腳本時,我收到一條錯誤消息,指出未安裝 twisted。 那是:
ImportError:沒有名為 twisted.python 的模塊**
這里的問題是您不應該使用sudo
。 這導致pip
嘗試安裝到/usr/local/lib
而不是~/glenv/lib
。 (而且,因為您使用了sudo
,所以成功完成了此操作,但這對您沒有幫助,因為您不允許在venv中使用系統站點包。)
sudo pip
可能導致此問題的原因有多種,但最可能的原因是:在大多數系統(包括我可以立即訪問的各種Mac和RHEL / CentOS盒)上, sudoers
文件將重置您的環境,然后重新添加在少數列入白名單的環境變量中。 這意味着,當您使用sudo pip
,它將看不到virtualenv
設置的環境變量,因此它將退回到執行默認操作並安裝到系統Python中,而不是venv中。
但實際上, 為什么會這樣並不重要。 答案是相同的:只需執行pip install
而不是sudo pip install
。
需要注意的是,你還想要刪除的sudo
上virtualenv
通話,因為這很可能導致VENV被錯誤地設置了(這就是為什么你需要的sudo chmod
,這不會是必要的,否則)。 在用戶主目錄下安裝內容的全部目的是,您可以使用普通用戶權限來進行安裝。
附帶說明,您可能還想升級到較新的virtualenv
/ pip
,因為1.8和1.2進行了一些錯誤修復和改進。 但是我驗證了即使使用最新版本(1.8.4和1.2.1),我也遇到了與您完全相同的問題,因此我認為這與您無關。
sudo pip
在這里引起了問題。 它會將軟件包安裝在您的系統中,而不是您創建的虛擬環境中。 因此,當它說要求已經滿足時。 嘗試添加它指向的目錄。 在您嘗試安裝時,您的情況是/usr/local/lib/python2.7/dist-packages
如果它在/usr/local/lib/...
,它不指向您的 virtualenv 文件夾,那么它將安裝在您的系統中。 否則,在正確的情況下,它看起來像這樣/usr/local/lib/..../<name of your virtualenv>/lib
。
您始終可以使用which python
和which pip
類的命令來查看它們是否都在使用我們虛擬環境的占位符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.