【问题标题】:How does virtualenv work with packages?virtualenv 如何与包一起工作?
【发布时间】:2014-02-11 21:35:25
【问题描述】:

我真的很困惑 virtualenv 如何处理包。我在 OSX 上并使用 Homebrew 安装了 python2 和 3,然后是 pip install virtualenv

在终端:

cd Virtualenv/MyTestEnv
. bin/activate
pip install numpy

会将 numpy 安装到我的 virtualenv 文件夹中,只有在我在该 env 中运行我的程序时才能访问该文件夹。根据我的阅读,它通过修改系统 $PATH 来实现。 但是,当我尝试使用 numpy 运行程序时,我不能:

(MyTestEnv)___________________
| ~/desktop/Python @ My-MBP (chronologos) 
| => ./wordsrt.py
Traceback (most recent call last):
  File "./wordsrt.py", line 2, in <module>
    import numpy
ImportError: No module named numpy

程序只有两行:

#!/usr/bin/env python
import numpy

当我执行pip list numpy 时显示为已安装?是hashbang的问题吗? 帮助将不胜感激!

【问题讨论】:

  • 首先,$PATH 与站点包的去向和找到位置无关;这就是 shell 用来查找可执行文件的方法。 $PYTHONPATH 是 Python 的 sys.path 的起始值。
  • 但是,您可能以某种方式运行系统范围的 pip 而不是 virtualenv 的 pip。如果您使用的是最新版本,我相信它可以检测到您在 virtualenv 中运行系统 pip 并给您一个错误/警告或安装到 virtualenv 中,所以……您在使用pip1.5?如果没有,请先尝试升级。
  • 另外,请记住 OS X 已经自带了自己的 Python 2.7,所以通过 Homebrew 安装另一个,你打开了一罐你可能不想处理的蠕虫。例如,路径上的第一个 pip 很容易成为 Apple Python 2.7 pip,而 python 是 Homebrew Python 2.7(特别是因为两种安装都喜欢将脚本安装到 /usr/local/bin 中,而 Python 的标准尝试是消除歧义——给出 python2.7pip-2.7 以及类似的名称——当它们都是 2.7 时没有帮助)。所以,如果你真的不需要 Homebrew 2.7,我会卸载它。
  • 感谢您的所有回答。我在下面发布了我所做的。

标签: python macos path virtualenv env


【解决方案1】:

我设法解决了我的问题。

首先我修改了我的 bashrc 以仅在 virtualenv 开启时允许 pip:

# pip should only run if there is a virtualenv currently activated
export PIP_REQUIRE_VIRTUALENV=true
# cache pip-installed packages to avoid re-downloading
export PIP_DOWNLOAD_CACHE=$HOME/.pip/cache
syspip(){
   PIP_REQUIRE_VIRTUALENV="" pip "$@"
}

然后,为了确保用户安装的二进制文件优先,我将其添加到我的 bash_profile export PATH=/usr/local/bin:$PATH

【讨论】:

    【解决方案2】:

    这就是问题所在:

    #!/usr/bin/env python
    

    另一种在 virtualenv 中运行 python 的方式对我来说更自然

    MyTestEnv/bin/python wordsrt.py
    

    试试这个。

    【讨论】:

      猜你喜欢
      • 2012-06-22
      • 1970-01-01
      • 2017-05-08
      • 2017-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-02
      • 2015-05-18
      相关资源
      最近更新 更多