【发布时间】:2011-12-13 16:32:46
【问题描述】:
我正在使用 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 的站点包目录。但是,这会将 virtualenv 绑定到这个特定的项目。我的理解是 virtualenv 不应该依赖于我的文件。相反,我的文件应该依赖于 virtualenv。
我正在考虑对这个项目的不同本地副本使用相同的 virtualenv,但如果我这样做,我将失去这种能力。有更好的方法来解决这个问题吗?
更新:
结果证明,最好的解决方案是让 pip 管理所有依赖项。
但是,这意味着无法使用 git 子模块,如 pip can't yet handle relative paths properly。因此,外部依赖项必须存在于 virtualenv 上(通常是:my_env/src/a_python_module)。
我仍然更喜欢使用子模块,让一些依赖项存在于我的项目树上。这对我来说更有意义,因为我已经需要分叉这些存储库来更改其中的一些内容,并且将来可能需要进行更多更改。
【问题讨论】:
标签: python django git virtualenv pythonpath