【问题标题】:Virtualenv on Ubuntu with no site-packages没有站点包的 Ubuntu 上的 Virtualenv
【发布时间】:2010-09-19 22:35:51
【问题描述】:

我最近在用 python 开发时一直在使用 virtualenv。我喜欢使用 --no-site-packages 选项的隔离开发环境的想法,但是在开发 PyGTK 应用程序时这样做可能有点棘手。 PyGTK 模块默认安装在 Ubuntu 上,我想让 virtualenv(带有 --no-site-packages)知道位于系统其他位置的特定模块。

最好的方法是什么?还是我应该干脆放弃 --no-site-packages 选项?

【问题讨论】:

    标签: python ubuntu pygtk virtualenv


    【解决方案1】:
    $ virtualenv --no-site-packages --python=/usr/bin/python2.6 myvirtualenv
    $ cd myvirtualenv
    $ source bin/activate
    $ cd lib/python2.6/
    $ ln -s /usr/lib/pymodules/python2.6/gtk-2.0/ 
    $ ln -s /usr/lib/pymodules/python2.6/pygtk.pth 
    $ ln -s /usr/lib/pymodules/python2.6/pygtk.py 
    $ ln -s /usr/lib/pymodules/python2.6/cairo/
    $ python
    >>> import pygtk
    >>> import gtk
    

    【讨论】:

    • 这让我走上了正轨,但 Ubuntu 11.10 改变了一切。对于 Ubuntu 11.10 中的 Python 2.7,更像这样: ln -sf /usr/lib/python2.7/dist-packages/{glib,gobject,cairo,gtk-2.0,pygtk.py,pygtk.pth} lib/python2 .7/站点包
    • 注意:gtk 文件夹和 pth 文件需要放在 lib/python2.6/site-packages,而不是 lib/python2.6。见:stackoverflow.com/questions/3580520/python-virtualenv-gtk-2-0
    • 这里是对 keturns 版本的一个小编辑,以使用 env var:$ ln -sf /usr/lib/python2.7/dist-packages/{glib,gobject,cairo,gtk-2.0,pygtk .py,pygtk.pth} $VIRTUAL_ENV/lib/python2.7/site-packages
    【解决方案2】:

    一种方法是使用 sys.path 将路径添加到您的代码中。

    import sys
    
    sys.path.append(somepath)
    

    另一种方法是使用站点,除了添加到 sys.path 之外,它还处理 .pth 文件。

    import site
    
    site.addsitedir(sitedir, known_paths=None)
    

    https://docs.python.org/library/site.html

    但您可能不想将此添加到所有相关代码中。

    我看到有人提到使用 sitecustomize.py 来执行类似的操作,但经过一些测试后,我无法让它按预期工作。

    这里提到了 sitecustomize.py 的自动导入在 2.5 中结束,如果你不在 2.5 上试试。 (只需将上述路径添加方法之一添加到文件中,并将其放入程序运行的目录中) 帖子中为 2.5 及更高版本的用户提到了一种变通方法。

    http://code.activestate.com/recipes/552729/

    【讨论】:

      【解决方案3】:

      我发现在这种情况下,符号链接,甚至复制特定文件(包、模块、扩展)都非常有效。

      它允许程序模拟在目标环境中运行,而不是更改应用程序以适应开发环境。

      AppEngine 之类的产品也一样。

      【讨论】:

      • 是的,但是符号链接在哪里?对于 PyGTK 之类的东西,我需要什么符号链接?
      • 链接到您的站点包。在我的 Ubuntu 上,我有 /usr/lib/python-support/python-gtk2/python2.5/gtk-2.0/gtk。已经 /var/lib/python-support/python2.5/gtk-2.0/gtk 链接在那里。似乎是一个好的开始,您可能需要反复试验。但你可以为下次编写脚本。
      【解决方案4】:

      在此处查看 postmkvirtualenv 挂钩脚本:

      https://stackoverflow.com/a/9716100/60247

      在这种情况下,他在创建新的 Virtualenv 后使用它来导入 PyQt 和 SIP,但是您可以将所需的包添加到 LIBS。

      并投票支持该脚本,因为它太棒了:)

      【讨论】:

        【解决方案5】:

        如果你想在virtualenv中包含相关系统的python gtk-2.0的链接,你可以使用pip安装ruamel.venvgtk

        pip install ruamel.venvgtk 您没有导入任何东西,链接是在安装过程中设置的。

        如果您使用tox,这将特别方便,在这种情况下您只需要包含依赖项(用于tox):

        deps:
            pytest
            ruamel.venvgtk
        

        并且新设置的python2.7环境将在测试运行之前包含相关链接。

        有关如何设置链接的更多详细信息,请参阅this answer

        【讨论】:

          猜你喜欢
          • 2011-08-31
          • 2016-02-20
          • 2011-03-29
          • 2015-04-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多