由于我有限的大脑经过大量阅读后才开始理解它,相对输入不好,绝对输入好。我的问题是,如何有效管理软件包的“实时”和“开发”版本?就是说,如果我使用绝对导入,那么我的实时代码和开发代码将在寻找相同的东西。
例
/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
中查找所有导入,并且您安装的所有内容(使用pip
,setup.py
等)都将进入mydev
。使用完mydev
虚拟环境后,运行$ deactivate
将您的
PYTHONPATH
恢复为以前的值。 mydev
仍然存在,因此您以后随时可以重新激活它。