我正在使用 Git 对 Django 项目进行版本控制。
尽可能将所有不属于项目本身但项目所依赖的源代码作为 Git 子模块引入。这些生活在lib
目录并且必须包含在 python 路径中。目录/文件布局如下所示:
.git
docs
lib
my_project
apps
static
templates
__init__.py
urls.py
manage.py
settings.py
.gitmodules
README
您认为将库包含在 python 路径上的最佳实践是什么?
我正在使用 virtualenv,因此我可以轻松地将库符号链接到 virtualenv 的 site-packages 目录。但是,这会将 virtualenv 绑定到该特定项目。我的理解是 virtualenv 不应该依赖于我的文件。相反,我的文件应该依赖于 virtualenv。
我正在考虑对这个项目的不同本地副本使用相同的 virtualenv,但如果我这样做,我将失去这种能力。有更好的想法如何解决这个问题吗?
Update:
最好的解决方案是让 pip 管理所有依赖项。
但是,这意味着无法使用 git 子模块,如 pip还不能正确处理相对路径 https://github.com/pypa/pip/issues/328。因此,外部依赖项必须存在于 virtualenv 上(通常是:my_env/src/a_python_module)。
我仍然更喜欢使用子模块,以使一些依赖项存在于我的项目树上。这对我来说更有意义,因为我已经需要分叉这些存储库来更改其中的一些部分,并且将来可能需要对它们进行更多更改。
使用以下命令将所有已安装的软件包转储到需求文件中(requirements.txt 看起来是标准命名)
pip freeze > requirements.txt
每次你需要一个新的虚拟环境时,你只需要这样做:
virtualenv <name> --no-site-packages
pip install -r requirements.txt
如果您想更新到较新的软件包, install -rrequirements.txt 也很有效
只需让requirements.txt与你的包保持同步(每次发生变化时运行pip freeze)就可以了,无论你有多少个virtualenv。
注意:如果您需要对软件包进行一些开发,您可以使用 -e (可编辑)参数来安装该软件包,这样您就可以编辑该软件包,并且不必每次想要测试新东西时都卸载/安装:)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)