代码之家  ›  专栏  ›  技术社区  ›  Jeremy Cantrell

Ubuntu上没有站点包的virtualenv

  •  24
  • Jeremy Cantrell  · 技术社区  · 16 年前

    我最近在用Python开发时使用了virtualenv。我喜欢使用--no-site packages选项的独立开发环境的想法,但是在开发PyGTK应用程序时这样做可能有点棘手。Pygtk模块默认安装在Ubuntu上,我想让virtualenv(不带站点包)知道位于系统其他地方的特定模块。

    最好的方法是什么?或者我应该把它吸干然后放弃——没有站点包选项?

    5 回复  |  直到 10 年前
        1
  •  34
  •   iElectric    15 年前
    $ 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
    
        2
  •  5
  •   twasbrillig    10 年前

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

    import sys
    
    sys.path.append(somepath)
    

    另一种方法是使用site,它除了添加到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
  •  1
  •   Ali Afshar    16 年前

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

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

    对于像appengine这样的东西也一样。

        4
  •  1
  •   Community CDub    8 年前

    在这里查看postkvirtualenv hook脚本:

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

    在这种情况下,他在创建新的virtualenv之后使用它来导入pyqt和sip,但是您可以将需要的包添加到libs中。

    投票决定剧本,因为它太棒了:)

        5
  •  0
  •   Community CDub    8 年前

    如果您想在virtualenv中包含到相关系统的python gtk-2.0的链接,您只需使用pip安装 ruamel.venvgtk :

    PIP安装ruamel.venvgtk 您没有导入任何内容,这些链接是在安装过程中设置的。

    如果你用的是 tox ,在这种情况下,您只需要包括依赖性(对于毒性):

    deps:
        pytest
        ruamel.venvgtk
    

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

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