【问题标题】:pip not installing to site-packages directory from within virtualenv when I use a requirements.txt当我使用 requirements.txt 时,pip 没有从 virtualenv 中安装到 site-packages 目录
【发布时间】:2013-07-16 13:22:00
【问题描述】:

我对使用 virtualenv 运行 Python 比较陌生,所以这可能是一个简单的解决方法,但我终其一生都无法弄清楚发生了什么。我正在运行安装了 Python 2.7.5 的 Windows 7 Professional x64 我已经安装了 pip 和 virtualenv。我有一个我正在尝试处理的 django 项目,我从 Heroku 存储库中克隆了该项目。当我尝试设置 virtualenv 并安装我的项目的要求时,我遇到了一个我无法弄清楚的奇怪错误。我的一切设置如下:

Django项目放在C:\Users\xxx\PythonProjects\myProject

我打开一个命令提示符,cd 到 myProject 文件夹并执行以下命令:

C:\Users\xxx\PythonProjects\myProject> virtualenv --no-site-packages env

这应该会为我的项目创建一个干净整洁的虚拟环境,所以我继续进行如下激活:

C:\Users\xxx\PythonProjects\myProject> Scripts\activate

提示更改表明我的 virtualenv 已激活,因此我通过“where”ing python 和 pip 仔细检查:

(env) C:\Users\xxx\PythonProjects\myProject> where python
C:\Users\xxx\PythonProjects\myProject\env\Scripts\python.exe
C:\Python27\python.exe

(env) C:\Users\xxx\PythonProjects\myProject>where pip
C:\Users\xxx\PythonProjects\myProject\env\Scripts\pip.exe
C:\Python27\Scripts\pip.exe

由于 virtualenv 看起来运行正常,我接下来尝试按如下方式 pip 要求文件:

(env) C:\Users\xxx\PythonProjects\myProject> pip install -r requirements.txt

pip 似乎可以成功安装我需要的所有软件包。但是,当我加载 python 时,会发生以下情况(django 是我的需求文件中的包之一):

(env) C:\Users\xxx\PythonProjects\myProject>python
Python 2.7.5 (default, May 15 2013, 22:44:16) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named django

然后我 cd 到 site-packages 文件夹以了解发生了什么并获得以下信息:

(env) C:\Users\xxx\PythonProjects\myProject\Lib\site-packages>dir
 Volume in drive C is Windows7_OS
 Volume Serial Number is 808F-577A

 Directory of C:\Users\xxx\PythonProjects\myProject\env\Lib\site-packages

07/17/2013  02:16 PM    <DIR>          .
07/17/2013  02:16 PM    <DIR>          ..
07/17/2013  02:16 PM               237 easy-install.pth
07/17/2013  02:16 PM    <DIR>          pip-1.3.1-py2.7.egg
07/15/2013  09:16 PM           332,005 setuptools-0.6c11-py2.7.egg
07/17/2013  02:16 PM                31 setuptools.pth
               3 File(s)        332,273 bytes
               3 Dir(s)  169,869,336,576 bytes free

看来我的 pip 调用未能将任何东西安装到我的站点包文件夹中,所以 python 不知道在哪里可以找到我需要的包。相反,它们似乎都位于C:\Users\xxx\PythonProjects\myProject\env\build

如果我在没有需求文件的情况下使用pip install foo,那么一切正常,foo 最终会出现在我的站点包文件夹中。有没有办法让我使用需求文件,或者我每次使用 virtualenv 时都必须手动安装每个包?抱歉,帖子可能过长,但我想确保所有相关信息都在这里。感谢您的帮助!


编辑附加信息:

看来我的需求文件可能是问题的根源。只有大约一半的包被下载,最后一个是django-polymorphic。我的需求文件中指定该包和以下包的行如下:

django-polymorphic==0.4.2
-e hg+https://bitbucket.org/fcurella/django-profiles@5c982ce7c040351fca9847a85dd4ff29f8a367e6#egg=django_profiles-dev
django-sekizai==0.7
-e git://github.com/divio/django-shop.git@0fb2258d27332166e3f76ad7cf7335c1f0a389b2#egg=django_shop-dev
-e git://github.com/fivethreeo/django-shop-categories.git@345fb100f5f680e6ac2066f74f25515eb2cd9374#egg=django_shop_categories-dev`

【问题讨论】:

  • 为了清楚起见,我已经尝试过设置有和没有 --no-site-packages 标志的设置。结果每次都是一样的。
  • 我在windows设置下没有virtualenv。但是,如果我没记错的话,通过pip 安装的软件包将安装在dist-packages 中。您会检查并将结果添加到您的问题描述中吗?谢谢你:)
  • 感谢您的快速回复。 env 子目录中的任何地方似乎都没有 dist-packages 文件夹。我假设如果它确实存在,它将位于myProject\env\Lib\dist-packages
  • 没关系。嗯,看起来windows下的virtualenv确实有不同的行为。但是我确实在 virtualenv 中成功安装了 Django,并且 lib 文件确实在 Lib\site-packages 下。我正在使用 PowerShell,仅供参考。
  • 激活新的virtualenv 后,pip freeze 不返回任何内容。关注pip install -U distribute setuptools 我有pip freeze 返回distribute==0.7.3

标签: python django windows virtualenv pip


【解决方案1】:

所以我想出了自己问题的答案。

基本上,如果您在 Windows 上运行 Python 2.7(可能还有其他版本),则某些软件包无法正常运行。如果其他人遇到此问题,您应该从 http://www.lfd.uci.edu/~gohlke/pythonlibs/ 下载 Windows 二进制文件,然后从您的 requirements.txt 文件中删除这些软件包。一旦我这样做了,pip 在安装过程中停止崩溃,并在我的requirements.txt 文件中正确安装了其余的包。

我需要的包是:

  1. 枕头
  2. 心理战
  3. 报告实验室

【讨论】:

  • 注意:默认情况下,Windows 二进制文件将安装到全局 site-packages 文件夹。这意味着当您设置虚拟环境时,您将不得不使用--system-site-packages 标志。如果您已经使用--no-site-packages 设置了虚拟环境,则可以通过重命名/Lib/no-global-site-packages.txt 文件(或完全删除它)来禁用该行为。我假设您也可以将全局 site-packages 文件夹的内容复制到您的虚拟环境的 site-packages 中,但我还没有搞砸。一切正常...
  • (...) 一些软件包不能很好地发挥作用 他们按规则行事。你必须知道这些规则。 你将不得不使用--system-site-packages 不仅你不需要而且你不应该设置这个标志 - 请参阅Can I install Python windows packages into virtualenvs?
  • 我只是观察到我留下的指令集只对--system-site-packages 标志有效。正如我所说,我没有将这些包移动到本地 virtualenv 中(因为我目前只运行一个项目,这不是一个紧迫的问题)。
猜你喜欢
  • 2021-01-02
  • 2019-08-31
  • 1970-01-01
  • 2016-02-17
  • 1970-01-01
  • 2015-07-29
  • 2012-09-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多