单个Django项目的两个虚拟环境?

时间:2017-07-19 23:12:02

标签: python django django-migrations virtual-environment

我有一个Django项目,我已经用它所需的包创建了一个虚拟环境。

现在进行开发,我一直在寻找一种工具,在将其包含到我的项目中之前我可以尝试一些代码。不久前我和Jupyter有过很好的经历,我觉得再次使用这个工具会很不错。

为了避免使用Jupyter的依赖项混乱最小的虚拟环境,我复制了它并在jupyter旁边安装了django-extensions

在我的settings.py中,我有:

if os.environ.get("VENV_NAME") == "jupyter-sandbox":
    INSTALLED_APPS += ['django_extensions']

这样我仍然可以在没有django_extensions的情况下使用最小的虚拟环境。

除了我无法从支持Jupyter的虚拟环境运行服务器之外,它现在运行得相当不错。这是因为我的项目使用django-images而django无法在此环境中找到迁移文件(在sites-packages/django_images/migrations中)。错误消息如下:

raise NodeNotFoundError(self.error_message, self.key, origin=self.origin)
django.db.migrations.exceptions.NodeNotFoundError: Migration core.0001_initial dependencies reference nonexistent parent node ('django_images', '0002_auto_20170710_2103')

创建符号链接是否一个好主意,以便两个虚拟环境共享相同的django-images迁移文件夹,还是会完全搞乱我的项目?

我对移民还没有完全的信心,并希望得到一些建议。

1 个答案:

答案 0 :(得分:3)

我认为这里的困惑是你应该做的。在任何标准项目中,您都应该拥有一个手工培养的项目依赖项列表。大多数django用户将该列表放入requirements.txt(通常建议)或setup.py。您总是可以有多个要求:requirements-test.txt,requirements-dev.txt等。使用其他文件顶部的-r requirements.txt来“导入”其他要求:

# requirements.txt
django=1.11.3

然后......

# requirements-test.txt
-r requirements.txt
pytest
tox

最后......

# requirements-dev.txt
-r requirements-test.txt
ipython
pdbpp
jupyter

您的目标是让您的项目在第一个文件中运行所需的一切。如果您的虚拟环境足够多,则无关紧要。此外,您应该使用类似tox的内容来测试您的requirements.txt是否确实包含它所需要的内容。希望有所帮助。