Python包导入问题

标签 python python-import python-packaging

我总是在 Python 包导入方面遇到困难。我在网上搜索,但找不到合适的答案。

我有以下目录结构:

.
./__init__.py
./packages/
./packages/__init__.py
./packages/package
./packages/package/__init__.py
./packages/package/module.py

module.py 源仅包含一行:

import package

如果我进入“packages”目录,我可以导入包:

>>> import python
>>>

如果我转到“.”目录中,我想导入模块(或包)如下:

>>> import packages.package.module as module

但我收到错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "vendor/package/module.py", line 1, in <module>
    import package
ImportError: No module named package

我需要在 __init__.py 文件中放入什么,才能执行上述导入? 更多,我需要在 ./__init__.py 文件中放入什么,以便我能够从 ../目录导入我的项目?

如果可能的话,我想在不更改 sys.path 变量的情况下解决这个问题。

最佳答案

为了使 module.py 中的 import package 成功,python 包 package 必须是可发现的。这意味着它必须位于 PYTHONPATH 上。默认情况下,此路径包括 site-packages (使用 easy_installpip 放置 python 包的目录)。此外,PYTHONPATH 还包括当前工作目录。

如果您位于 . 中,则 . 会放置在 PYTHONPATH 的开头。该目录包含名为package的Python包,因此导入包失败。

您可以在启动 python 解释器之前移至 ./packages,也可以安装您的软件包。要执行后者,您需要一个 setup.py

关于Python包导入问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13376251/

相关文章:

python - 如何在一个表达式中合并两个字典?

python - 将 SQLAlchemy ORM 查询结果转换为 JSON,而不是创建 ORM 对象

python - 从另一个文件调用 Python 函数

python - 如何定义可导入 Python 模块的导入、__init__.py 文件和结构

python - 当包在子目录中时,从顶层包含包数据 Python

python - 为什么 from ... import ... 语句包含隐式导入?

python - 将 numpy 数组保存为 SVG 格式

python - 如何在 django admin 中处理这种特殊情况?

python - 导入子模块的子模块上的 ModuleNotFoundError

python - 是否可以将 Python 模块(.py 文件)导入字典?