在虚拟环境中安装pysvn

9
我可以使用二进制包在整个网站中安装pysvn。例如,在Ubuntu中:
$ sudo apt-get install python-svn

或者在Windows上,我可以使用.exe安装程序进行整个网站范围的安装。
在虚拟环境之外,我可以这样做。
$ python -c "import pysvn; print 'ok'"
ok

现在我创建了一个虚拟环境(我使用来自virtualenvwrapper包的mkvirtualenv命令)

$ mkvirtualenv test1

但是由于 virtualenv 默认不导入全局的 site 包,因此我无法在该虚拟环境中使用 pysvn。

(test1)$ python -c "import pysvn; print 'ok'"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named pysvn

如何在virtualenv中访问pysvn而不启用全局站点包?
1个回答

9

有多种处理方法。

选项0

在虚拟环境内允许访问全局网站包。创建虚拟环境时,向virtualenv传递--system-site-packages选项。

或者,使用toggleglobalsitepackages命令(来自virtualenvwrapper)允许访问全局网站包。

(test1)$ toggleglobalsitepackages
Enabled global site-packages
(test1)$ python -c "import pysvn; print 'ok'"
ok

(test1)$ toggleglobalsitepackages
Disabled global site-packages
(test1)$ python -c "import pysvn; print 'ok'"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named pysvn

选项1

使用easy_install通过二进制安装程序将软件包安装到虚拟环境中。例如,在Windows上,该过程可能如下所示:

  1. 下载二进制安装程序文件。在此示例中,我们称其为example_installer.msi(或example_installer.exe)
  2. 激活虚拟环境(我在Windows上使用virtualenvwrapper-win
  3. easy_install example_installer.msi

通过双击并以gui模式运行安装程序(然后使用Windows“添加/删除程序”控制面板进行卸载),验证您是否可以在站点范围内安装安装程序。如果您可以在站点范围内安装它,则easy_install可能可以将其安装到虚拟环境中。

但是,pysvn二进制安装程序未正确结构化以供easy_install使用。如果您尝试在Windows上使用pysvn二进制安装程序进行此操作,则会收到以下错误:

error: py27-pysvn-svn185-1.7.9-1572.exe is not a valid distutils Windows .exe

选项2

使用virtualenvwrapper中的add2virtualenv命令。这将在虚拟环境的site-packages目录中添加一个.pth文件,使虚拟环境可以访问指定的目录。

请注意,您必须指定父目录,而不是特定的包。也就是说,不要写成:

add2virtualenv /usr/lib/python2.7/dist-packages/pysvn

应该是

add2virtualenv /usr/lib/python2.7/dist-packages

请看这个问题:add2virtualenv(虚拟环境包装器)与scipy不兼容怎么办

要查找软件包安装的目录,请执行以下操作:

$ python
>>> import pysvn
>>> pysvn.__file__
'/usr/lib/python2.7/dist-packages/pysvn/__init__.pyc'

问题在于,这包括指定目录中的所有软件包,而不仅仅是pysvn。因此,它具有与toggleglobalsitepackages相同的缺点。
选项3
将安装目录的符号链接放入虚拟环境的site-packages中。
访问虚拟环境的site-packages目录的一种便捷方法是使用virtualenvwrapper'scdsitepackages命令。
cdsitepackages
ln -s /usr/lib/python2.7/dist-packages/pysvn pysvn

摘要

在Windows上,尝试选项1(从二进制安装程序中使用easy_install)。如果失败,请全局安装,并使用virtualenvwrapper-win's toggleglobalsitepackages命令或通过向virtualenv传递--system-site-packages选项来允许虚拟环境访问它。

对于支持符号链接的系统,例如Linux和OS X,请使用选项3。它允许您访问所需的特定软件包,而不允许访问整个全局网站软件包。


1
本地依赖项最大的问题之一是,您无法在setup.py或requirements.txt中以任何有意义的方式指定依赖项,以便pip或其他创建虚拟环境的工具可以实际安装本地依赖项。因此,这对于打包/分发并没有帮助。尽管如此,至少可以很好地概括如何使开发隔离起作用。 - sholsapp
新的wheel分发格式旨在使使用pip安装二进制依赖项更加容易。 - Christian Long
在Windows中,选项3的symlink命令的等效命令是:mklink /d pysvn C:\Python27\Lib\site-packages\pysvn\。您可能需要在命令提示符中以管理员身份运行该命令。 - plasmaTonic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接