2015-09-07 58 views
0

我正在使用Ubuntu 14.04。我有一个脚本取决于pynotify。当脚本运行在任何虚拟环境之外时,它运行良好(其他依赖关系也是全局安装的),但是如果我在任何虚拟环境(安装了其他依赖项)内运行相同的脚本,则不起作用。
然后我以为我早就将它安装了,但事实并非如此。我试过这个(全球):无法在virtualenv中导入pynotify

pip freeze | grep pynotify 

但是,它没有给出任何结果。这种行为有没有解释?

回答

1

更新您的virtualenv环境,包括系统站点包

mkvirtualenv --system-site-packages your_virtual_env_name 

如果建立与virtualenv --system-site-packages ENV,您 虚拟环境将 /usr/lib/python2.7/site-packages(或其它地方全局 网站继承包-packages目录是)。

如果您拥有对全球站点包 目录的控制权,并且您希望依赖其中的软件包,则可以使用此功能。如果您想从全局系统中分离出 ,请不要使用此标志。

来源:https://virtualenv.pypa.io/en/latest/userguide.html#the-system-site-packages-option

+0

它的工作原理。但是,这不违背工作virtualenv应该做的吗?它正在使用已经在全球范围内安装的所有东西,那么它有什么帮助?我的意思是,没有venv我们可以做同样的事,对吧?通常,我们使用'pip freeze'生成'requirements.txt'文件并与其他人共享依赖关系,但在这种情况下,它将包含许多与此项目无关的内容。有没有办法只包括与需求相关的东西? –

+0

__“使用--no-site-packages选项运行virtualenv将不包含全局安装的软件包,这对于保持软件包列表清洁以防需要稍后访问它很有用。 virtualenv 1.7及更高版本。“__来源:http://docs.python-guide.org/en/latest/dev/virtualenvs/#other-notes –

+0

默认情况下,virtualenv会给你一个干净的环境,没有安装软件包,也不会使用您的全球安装软件包。如果你想在你的项目中使用pynotify,我们的想法是在干净的环境下使用pip明确地和单独地将pynotify安装到该项目中,而不是使用已经安装在系统上的全局包。 –