【问题标题】:Dependency management between multiple Python modules多个 Python 模块之间的依赖管理
【发布时间】:2018-05-18 13:49:53
【问题描述】:

我有一个包含多个 Python 模块的项目,每个模块都有自己的虚拟环境。

项目结构:

data-reader (Python module)
    data_reader
        reader.py
    venv (virtual environment directory for data-reader)
    requirements.txt
data-writer (Python module)
    data_writer
        writer.py
    venv (virtual environment directory for data-writer)
    requirements.txt
commons (Python module)
    commons
        utils.py
    venv (virtual environment directory for commons)
    requirements.txt
    setup.py

我想将commons 作为两个模块的依赖项安装:data-readerdata-writer,最好作为可编辑的项目依赖项。

我在 commons 中创建了 setup.py,并在两个模块中的 requirements.txt 中添加了以下要求:

-e commons

当我为其中一个模块激活虚拟环境并安装其要求时,我可以使用终端在 Python 解释器中从 commons 运行脚本,这是预期和期望的结果,但在 Intellij IDEA IDE 中,我收到一个错误,在 import 语句下划线,并带有以下错误消息:Unresolved reference 'commons'

from commons import utils

我不知道这是IDEA 还是我使用的方法的问题。

  • 添加和管理此类依赖项的推荐方法是什么?
  • 首先将此依赖项添加为可编辑项目是一个好主意,还是有其他推荐的方法?

【问题讨论】:

  • IDE 显示什么错误信息?
  • 你的方法很好,没有严重的问题。当你的产品代码库增长时,你总是会得到类似的东西。
  • 我已编辑问题以包含错误消息,即Unresolved reference 'commons'
  • 可行的解决方案,但很难维护:当您更改公共资源时,使用 setup.py 创建一个 sdist 版本,然后在其他模块中使用 pip 安装该版本。
  • 实际上,一个人编写的小项目使用许多包是一种巨大的矫枉过正。随着项目的增长,它被拆分成这样的包,每个包都是独立开发的,并且有自己的 vcs 存储库

标签: python virtualenv


【解决方案1】:

问题似乎与 Intellij / Pycharm 有关。

您应该选择 Pycharm 使用的解释器来匹配虚拟环境之一。

如果您不这样做,Pycharm 将使用未安装您要导入的库的默认 python 解释器。

您可以使用settings -> preference -> Project Interpreter (in the left menu bar) 选择它。 然后将本地virtualenv添加到特定的python项目中,为他们三个。

如果有帮助,官方文档是:

https://www.jetbrains.com/help/pycharm/creating-virtual-environment.html

【讨论】:

  • 感谢您的回答。它确实与 IntelliJ/PyCharm 有关。实际上,事实证明这是一个非常古老的问题,没有得到正确的解决:youtrack.jetbrains.com/issue/PY-976 不幸的是,您建议的解决方法对我也不起作用,无论如何我正在这样做以简化其他一些流程。跨度>
【解决方案2】:

由于已经有一段时间了,我正在为其他读者发布一个答案。事实证明,这种方法对我们有好处,并且到目前为止运行良好。

问题出在 IntelliJ/PyCharm 上,结果证明它是一个非常旧的问题,但仍未正确修复:https://youtrack.jetbrains.com/issue/PY-976。问题本身报告了几个解决方法。我个人还没有尝试过所有这些方法,但到目前为止我尝试过的方法都没有对我有用。

这里有另一个帖子:PyCharm does not recognize modules installed in development mode

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 2011-09-07
    • 1970-01-01
    • 2012-03-09
    • 2010-10-16
    • 1970-01-01
    • 2011-05-03
    相关资源
    最近更新 更多