我在已 checkout 的存储库副本中对 python 模块进行了一些更改,需要对其进行测试。但是,当我尝试运行使用该模块的脚本时,它一直从存储库的主干中导入模块,这对我没有用。
我尝试设置 PYTHONPATH,但它什么也没做。经过一番搜索后,我发现 site-packages 目录下的 .pth 文件中的任何内容甚至会放在 PYTHONPATH 之前(对我来说这违背了拥有它的目的)。我相信这是我的模块未被选中的原因。
我说的对吗?如果是这样,覆盖它的方法是什么(不修改脚本以具有 sys.path.insert(0,path)
)?
编辑:回复 NicDumz - 原始存储库在 /projects/spam
下. python 模块是 /projects/spam/sources/python/a/b/
中的一部分。 .然而,这些都是每晚使用自制的 make 变体“构建”的,然后将它们放入 /projects/spam/build/lib/python/a/b/
中。 .该脚本仅使用最后一个路径下的模块。
我已将整个存储库 checkout 到 /home/sundar/spam
下, 并在 /home/sundar/spam/sources/python/a/b/mymodule.py
中进行了更改.我已将 PYTHONPATH 设置为 /home/sundar/spam/sources/python
并试图import a.b.mymodule
没有成功。
最佳答案
听起来您需要安装 virtualenv并使用它为不同的目的设置不同的环境。在一个环境中,您将从存储库的主干导入模块,但在另一个环境中,您将混合使用主干模块和测试模块。
通过像这样将所有内容分开,您可以更轻松地回滚更改(只需删除整个虚拟环境文件夹),并且可以大大降低您的测试装备最终提交到存储库的风险。
关于python - 如何让 Python 在不手动修改 sys.path 的情况下选择正确的模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1679673/