【问题标题】:Using virtualenv and virtualenvwrapper without homebrew's Python在没有自制 Python 的情况下使用 virtualenv 和 virtualenvwrapper
【发布时间】:2014-06-16 16:17:09
【问题描述】:

我使用Homebrew 来管理我的大部分软件安装,但我发现使用 Python 很复杂,尤其是使用 virtualenv(和 virtualenvwrapper)以隔离方式管理包。问题是我发现 virtualenv 将 python 符号链接到通过 Homebrew 安装的当前 Python 版本,如下所示:

~/.pip/virtualenvs/httpie
├── include
│   └── python2.7 -> /usr/local/Cellar/python/2.7.7_2/Frameworks/Python.framework/Versions/2.7/include/python2.7
└── lib
    └── python2.7
        ├── UserDict.py -> /usr/local/Cellar/python/2.7.7_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/UserDict.py
        ├── UserDict.pyc
        ├── _abcoll.py -> /usr/local/Cellar/python/2.7.7_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/_abcoll.py
        ├── _abcoll.pyc
        ├── _weakrefset.py -> /usr/local/Cellar/python/2.7.7_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/_weakrefset.py
        ├── _weakrefset.pyc
        ├── abc.py -> /usr/local/Cellar/python/2.7.7_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/abc.py
        ├── abc.pyc
        ├── codecs.py -> /usr/local/Cellar/python/2.7.7_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/codecs.py
        ├── codecs.pyc
[...]

每当通过自制程序更新 Python 时,这会导致各种链接问题:

$ http --head http://flic.kr/p/dQm85A
dyld: Library not loaded: @executable_path/../.Python
  Referenced from: /Users/3dweb/.pip/virtualenvs/httpie/bin/python2.7
  Reason: image not found
Trace/BPT trap: 5

当我创建新的 virtualenv 时,如何将 virtualenv 设置为始终(自动)指向系统 Python?

【问题讨论】:

  • 使用系统 Python 的替代方法是使用选项 --always-copymkvirtualenv。这将复制您的 Python 二进制文件而不是符号链接,这可能会解决您在更新 Homebrew Python 时遇到的问题。
  • 好建议@HuuNguyen。
  • 是的,效果很好!我确实在 mkvirtualenv 的 --help 页面中注意到了它,并认为它可以,但决定先询问。当然,如果您不介意复制大约 20MB 的二进制文件和库。

标签: python macos python-2.7 homebrew


【解决方案1】:

在自制程序之外通过 pip 将 virtualenv 安装到系统 Python 中。直接调用 virtualenv。

【讨论】:

  • 这是正确的 -- mkvirtualenv 有帮助文本“默认是安装 virtualenv 的解释器”。
  • 我试过了,但我遇到了问题:/usr/bin/easy_install pip 首先,我必须更改此目录的所有权:/Library/Python/2.7/site-packages 然后,当我再次运行安装命令时,我看到了这个发生了:Installing pip script to /usr/local/binInstalling pip2.7 script to /usr/local/binInstalling pip2 script to /usr/local/binInstalled /Library/Python/2.7/site-packages/pip-1.5.6-py2.7.egg这让我很担心:自制软件会取代它吗?
  • 无需更改权限,这就是sudo 的用途。您正在安装到核心系统中,因此您需要 root 权限。
  • 老实说,我不知道自制程序和/usr/local/bin 中的点子交互。我的建议是将/usr/local/bin/pip 重命名为/usr/local/bin/pip-system。这样你就知道你只通过名字就运行了正确的程序。那么你就不用担心 $PATH 问题了。
  • 谢谢,我听从了你的一些建议……简而言之,我通过自制软件卸载了 Python,然后通过 easy_install 安装了 virtualenv 和 virtualenvwrapper,尽管我可以安装 pip 并通过它安装它们。无论如何,一旦完成,我再次通过自制软件安装了 Python。现在,每当我创建一个新的 virtualenv 时,它都会指向系统一次,因为正如@HuuNguyen 所说,它指向安装它的那个。也许它可以改进,但现在我很满意!
猜你喜欢
  • 1970-01-01
  • 2017-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-11
  • 1970-01-01
  • 1970-01-01
  • 2019-02-06
相关资源
最近更新 更多