【问题标题】:Install pysvn in a virtualenv在 virtualenv 中安装 pysvn
【发布时间】:2014-09-22 22:33:50
【问题描述】:

我可以使用二进制包安装 pysvn 站点范围。例如,在 Ubuntu 中:

$ sudo apt-get install python-svn

或者,在 Windows 上,我可以使用 .exe 安装程序在站点范围内安装。

在 virtualenv 之外,我可以这样做

$ python -c "import pysvn; print 'ok'"
ok

现在我创建一个 virtualenv(我使用 virtualenvwrapper 包中的 mkvirtualenv 命令)

$ mkvirtualenv test1

但是由于 virtualenv 默认不导入全局站点包,所以我不能在这个 virtualenv 中使用 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 而不启用全局站点包?

【问题讨论】:

    标签: python virtualenv pysvn


    【解决方案1】:

    有很多方法可以处理这个问题。

    选项 0

    允许从 virtualenv 中访问全局站点包。在创建虚拟环境时将--system-site-packages 选项传递给virtualenv

    或者,使用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 通过二进制安装程序将软件包安装到 virtualenv。例如,在 Windows 上,该过程可能如下所示:

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

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

    但是,pysvn 二进制安装程序的结构不适合 easy_install。如果您使用 Windows pysvn 二进制安装程序尝试此操作,则会收到此错误:

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

    选项 2

    使用来自virtualenvwrapperadd2virtualenv 命令。这会在 virtualenv 的 site-packages 目录中添加一个 .pth 文件,从而使 virtualenv 可以访问指定的目录。

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

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

    应该是

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

    看到这个问题:add2virtualenv (virtualenv wrapper) does not work with scipy

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

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

    问题是,这包括了指定目录下的所有包,而不仅仅是pysvn。所以,它和toggleglobalsitepackages有同样的缺点。

    选项 3

    将安装目录符号链接到 virtualenv 的站点包。

    访问 virtualenv 的 site-packages 目录的一种便捷方法是使用 virtualenvwrapper's cdsitepackages 命令

    cdsitepackages
    ln -s /usr/lib/python2.7/dist-packages/pysvn pysvn
    

    总结

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

    在支持符号链接的系统上,例如 Linux 和 OS X,使用选项 3。它允许您访问您需要的特定包,而不允许访问整个全局站点包。

    【讨论】:

    • 原生依赖的最大问题之一是,你不能在 setup.py 或 requirements.txt 中以任何有意义的方式指定依赖,这样 pip 或其他任何创建你的 virtualenv 的东西都可以实际安装本机依赖项。因此,这对打包/分发没有帮助。尽管如此,至少可以很好地总结开发隔离工作。
    • 新的wheel 分发格式旨在使使用pip 安装二进制依赖项更加容易。
    • 选项 3 中符号链接命令的 Windows 等效项:` mklink /d pysvn C:\Python27\Lib\site-packages\pysvn\ ` 您可能需要在命令提示符下成为管理员才能运行那个命令。
    猜你喜欢
    • 1970-01-01
    • 2012-07-14
    • 2016-03-19
    • 2012-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多