我在已检出的存储库副本中对python模块进行了一些更改,需要对它们进行测试。但是,当我尝试运行使用该模块的脚本时,它会继续从存储库的主干导入模块,这对我没用。
我尝试设置PYTHONPATH,它什么也没做。经过一番搜索后,我发现即使在PYTHONPATH之前,site-packages目录下的.pth文件中的任何内容都会被放入(这对我来说是不合适的)。我相信这是我的模块没被挑选的原因。
我说错了吗?如果是这样,有什么方法可以覆盖它(不修改脚本以获得sys.path.insert(0,path)
)?
编辑:回复NicDumz - 原始存储库位于/projects/spam
下。 python模块是/projects/spam/sources/python/a/b/
中的一部分。然而,这些都是使用自己开发的make变体每晚“建立”,然后将它们放入/projects/spam/build/lib/python/a/b/
。该脚本仅在此最后一个路径下使用该模块
我已将整个存储库检出到/home/sundar/spam
下,并在/home/sundar/spam/sources/python/a/b/mymodule.py
中进行了更改。我已将PYTHONPATH设置为/home/sundar/spam/sources/python
并尝试import a.b.mymodule
但没有成功。
答案 0 :(得分:3)
听起来您需要安装virtualenv并使用它来为不同目的设置不同的环境。在一个环境中,您将从存储库的主干导入模块,但在另一个环境中,您将混合使用主干模块和测试模块。
通过将所有内容保持为独立,您可以更轻松地回滚更改(只需删除整个虚拟环境文件夹),并且可以大大降低测试绑定最终被提交到存储库的风险。
答案 1 :(得分:2)
您可以编写一个小脚本,例如下面的脚本,它以sys.path为前缀,然后设置PYTHONSTARTUP以使用该脚本。
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']
答案 2 :(得分:1)
您当前的工作目录位于sys.path
的第一位。任何事情都胜过路上的其他事情。
将“测试版”复制到sys.path
中靠近目录列表前面的某个位置,就像当前的工作目录一样。
答案 3 :(得分:0)
您可以使用setuptools或distribute创建设置脚本,然后执行python setup.py develop
。它将在.pth文件中添加指向您的工作副本的链接,覆盖任何已安装的版本。
完成后,您只需删除.pth文件中的链接即可。