绝对导入和管理" live"和"开发"包的版本

时间:2014-05-13 20:40:54

标签: python debugging testing project-management python-2.6

由于我的有限大脑经过多次阅读后才明白它,相对进口不好,绝对进口好。我的问题是,如何才能有效地管理" live"和"开发"包的版本?也就是说,如果我使用绝对导入,我的实时代码和开发代码将会看到相同的东西。

示例

/admin/project1/__init__.py
               /scripts/__init__.py
                       /main1.py
                       /main2.py
               /modules/__init__.py
                       /helper1.py

与" / admin"在我的PYTHONPATH上,project1的内容都使用绝对导入。例如:

main1.py

import project1.modules.helper1

但是我想将project1的内容复制到另一个位置,并使用该副本进行开发和测试。因为一切都是绝对的,因为" / admin"在PYTHONPATH上,我复制的版本仍然会引用实时代码。我可以将我的新位置添加到PYTHONPATH,并手动更改所有文件的名称(即添加" dev"到所有内容的末尾),做我的更改/工作,然后当我准备好再次,手动上线,删除" dev"从一切。这会起作用,但是很麻烦,容易出错。

当然必须有一些更好的处理方式" live"和"开发" Python项目的版本。

2 个答案:

答案 0 :(得分:1)

您想使用virtualenv(或类似名称)。

$ virtualenv mydev
$ source mydev/bin/activate

这会在mydev目录中创建一个本地Python安装,并修改几个关键环境变量以使用mydev而不是默认的Python目录。 现在,您的PYTHONPATH会先mydev查看任何导入,您安装的任何内容(使用pipsetup.py等)都会进入mydev。完成mydev虚拟环境的使用后,运行

$ deactivate

PYTHONPATH恢复为之前的值。 mydev仍然存在,因此您以后可以随时重新激活它。

答案 1 :(得分:1)

@chepner的virtualenv建议是一个很好的建议。另一个选择,假设你的项目没有作为python egg安装在机器上,只需将你的开发路径添加到PYTHONPATH的前面。 Python会在常规项目之前找到您的开发项目1,每个人都很高兴。鸡蛋会破坏乐趣,因为它们往往会在PYTHONPATH路径之前得到解决。