由于我有限的大脑经过大量阅读后才开始理解它,相对输入不好,绝对输入好。我的问题是,如何有效管理软件包的“实时”和“开发”版本?就是说,如果我使用绝对导入,那么我的实时代码和开发代码将在寻找相同的东西。



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


在我的PYTHONPATH上使用“ / admin”,project1的内容全部使用绝对导入。例如:

main1.py

import project1.modules.helper1


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

当然,必须有更好的方法来处理Python项目的“实时”和“开发”版本。

最佳答案

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

$ virtualenv mydev
$ source mydev/bin/activate


这将在mydev目录中创建本地Python安装,并修改多个关键环境变量以使用mydev代替默认的Python目录。
现在,您的PYTHONPATH首先在mydev中查找所有导入,并且您安装的所有内容(使用pipsetup.py等)都将进入mydev。使用完mydev虚拟环境后,运行

$ deactivate


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

08-17 10:38