代码之家  ›  专栏  ›  技术社区  ›  Sundar R

如何让Python在不手动修改sys的情况下选择正确的模块。路径

  •  1
  • Sundar R  · 技术社区  · 16 年前

    我在我签出的存储库副本中的python模块中做了一些更改,需要对其进行测试。但是,当我尝试运行使用该模块的脚本时,它会一直从存储库的主干导入该模块,这对我没有用处。

    我试着设置PYTHONPATH,但什么都没做。在四处搜寻之后,我发现了房间里的任何东西。站点包目录下的pth文件甚至会在PYTHONPATH之前就被放入(对我来说,这违背了拥有它的目的)。我相信这就是我的模块没有被选中的原因。

    我说得对吗?如果是这样的话,有什么方法可以覆盖它(而不修改脚本使其具有 sys.path.insert(0,path) )?

    /projects/spam . python模块就是其中的一部分 /projects/spam/sources/python/a/b/ . 然而,这些都是每晚使用一个自制的变型来“制造”的,然后将它们放入电脑中 /projects/spam/build/lib/python/a/b/ . 脚本仅在最后一条路径下使用模块。
    我已将整个存储库签出到下面 /home/sundar/spam ,并在 /home/sundar/spam/sources/python/a/b/mymodule.py . 我已将我的蟒蛇路径设置为 /home/sundar/spam/sources/python 并试图 import a.b.mymodule 没有成功。

    4 回复  |  直到 16 年前
        1
  •  3
  •   Michael Dillon    16 年前

    virtualenv 并使用它为不同的目的设置不同的环境。在一个环境中,您将从存储库的主干导入模块,但在另一个环境中,您将混合使用主干模块和测试模块。

    通过这样将所有内容分开,您可以更轻松地回滚更改(只需删除整个虚拟环境文件夹),并大大降低测试装配最终提交到存储库的风险。

        2
  •  2
  •   R Hyde    16 年前

    import sys
    sys.path.insert(0, 'c:/temp')
    

    例如

    C:\temp>set PYTHONSTARTUP=c:\temp\tst.py
    C:\temp>C:\Python26\python
    Python 2.6.2 (r262:71605, Apr 14 2009, 22:40:02) [MSC v.1500 32 bit (Intel)] on
    win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import sys
    >>> sys.path
    ['c:/temp', '', 'C:\\Python26\\lib\\site-packages\\setuptools-0.6c9-py2.6.egg',
    'C:\\Python26\\lib\\site-packages\\pyyaml-3.08-py2.6-win32.egg', 'C:\\Python26\\
    lib\\site-packages\\pyglet-1.1.3-py2.6.egg', 'C:\\Python26\\lib\\site-packages\\
    simpy-2.0.1-py2.6.egg', 'C:\\Python26\\lib\\site-packages\\nose-0.11.1-py2.6.egg
    ', 'C:\\Python26\\lib\\site-packages\\mercurial-unknown-py2.6-win32.egg', 'c:\\t
    emp', 'C:\\WINDOWS\\system32\\python26.zip', 'C:\\Python26\\DLLs', 'C:\\Python26
    \\lib', 'C:\\Python26\\lib\\plat-win', 'C:\\Python26\\lib\\lib-tk', 'C:\\Python2
    6', 'C:\\Python26\\lib\\site-packages', 'C:\\Python26\\lib\\site-packages\\win32
    ', 'C:\\Python26\\lib\\site-packages\\win32\\lib', 'C:\\Python26\\lib\\site-pack
    ages\\Pythonwin']
    
        3
  •  1
  •   S.Lott    16 年前

    您当前的工作目录是列表中的第一个 sys.path . 在这条路上,任何事情都比任何事情都重要。

    系统。路径 ,就像您当前的工作目录一样。

        4
  •  0
  •   Luper Rouch François Lagunas    16 年前

    setuptools 或 distribute ,然后做一个 python setup.py develop