PYTHONPATH干扰virtualenv

时间:2014-12-17 23:38:53

标签: python macos ipython virtualenv

我使用的是Mac OSX 10.10.1。我通常使用brew或pip来安装所有东西。我注意到我的virtualenv总是抓住我所有本地安装的Python包。我通过删除$PYTHONPATH配置文件中的~/.zshrc变量来修复此问题。这解决了virtualenv抓住我所有Python包的问题,​​但是然后IPython找不到/usr/local/lib/python2.7/site-packages中的内容。我最终找到了一种方法来解决IPython问题,方法是将/usr/local/bin/ipython中的hashbang行更改为#!/usr/local/bin/ipython,如this SO帖子中所建议的那样。据我所知,现在一切正常。

我的问题:

  1. 最好将所有内容安装到/Library/Python/2.7/site-packages?或者在/usr/local/lib/python2.7/site-packages中拥有一半的东西会更好吗?让一个人的包裹分开是一种精神分裂症。

  2. 我做了正确的事情是:a)删除我个人定义的$PYTHONPATH变量,b)将#!/usr/bin/ipython中的hashbang更改为#!/usr/local/bin/ipython /usr/local/bin/ipython文件?我的$PYTHONPATH变量已设置为export PYTHONPATH="/usr/local/lib/python2.7/site-packages/":${PATH}配置文件中的~/.zshrc

1 个答案:

答案 0 :(得分:1)

  1. 最好尽可能在virtualenv中安装软件包(对于您正在处理的应用程序或项目)。这使得依赖项保持独立,因此您应该只在适当的时候全局安装(但通常不是因为依赖项是特定于项目的。)

    但是要回答你的问题:某些依赖关系确实可能是系统范围内的,而其他依赖关系则属于virtualenv。让系统范围的Python,用户Python和virtualenv Python协同工作有点奇怪但是可以做到。尽量避免在各处散布你的依赖关系,因为这很难维护。结合brew / pip也是灾难的一个因素,因为他们并不总是彼此意识到并且确实会干扰。我将MacPorts(或Homebrew)用于非Python依赖项和Python解释器安装以及所有Python包的pip。

  2. 听起来不对:你不应该编辑文件的hashbang(当然,除非作为一个带有bug的软件包的解决方法)。更新PYTHONPATH变量是正常的,因为许多人在他们的shell配置文件中有这样的修改。您对该文件的编辑是不可持续的,因为升级或其他更改可能会再次破坏。如果您使用的是正确打包的版本,则不必指向另一个Python解释器。