【问题标题】:Two virtual environments for a single Django project?单个 Django 项目的两个虚拟环境?
【发布时间】:2017-12-25 10:22:16
【问题描述】:

我有一个 Django 项目,为此我创建了一个包含所需包的虚拟环境。

现在为了开发,我正在寻找一种工具,我可以在其中尝试一些代码,然后再将其包含到我的项目中。不久前我对 Jupyter 有过很好的体验,我认为再次使用这个工具会很好。

为了避免最小的虚拟环境与 Jupyter 的依赖项混淆,我复制了它并安装了 jupyterdjango-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 迁移文件夹是个好主意,还是会完全搞乱我的项目?

我对迁移还不是完全有信心,希望得到一些建议。

【问题讨论】:

  • 所以当你使用django_extensions 时你也需要django_images 吗?
  • 是的,我在我的模型中使用django_images
  • 如果你复制了你原来的 virtualenv 然后安装了 jupyter 和 django-extensions,那么它应该仍然安装了 django-images 而不会抱怨那些迁移丢失。
  • 我用pip install -r requirements.txt复制了venv。现在django_images 已安装在两个环境中,但第二个环境中缺少迁移文件。
  • 如果您担心弄乱 virtualenvs,那么您做错了什么。它们应该是一次性的,并且在任何时候都易于重新创建。

标签: python django django-migrations virtual-environment


【解决方案1】:

我认为这里的混乱是你应该做的。在任何标准项目中,您都应该有一个手工制定的项目依赖项列表。大多数 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 是否确实包含它需要的内容。希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 2017-12-19
    • 1970-01-01
    • 2014-11-09
    • 2021-01-29
    • 2019-06-13
    • 2017-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多