【问题标题】:Can import python package but not its modules可以导入python包但不能导入它的模块
【发布时间】:2019-04-13 03:44:15
【问题描述】:

我正在编写一组用于脚本和调试的工具,我正在打包。虽然我可以自己导入包,但每当我尝试导入包中的模块时,我都会收到 ModuleNotFoundError

package_dir
│   README.md
│   setup.py   
│
└───package
│   │   __init__.py
│   │
│   └───utils
│       │   __init__.py
│       │   image_utils.py
│       │   ...
│   
└───...

安装: 使用python setup.py install 似乎工作正常,我可以成功import package

__init__.py: 我的理解是我不需要 __init__.py 文件,因为我正在运行 python3.6,但是我已经尝试了 package/ 和 utils/ 下有和没有 __init__.py 的所有组合,情况没有变化。无论配置如何,import package 都能正常工作,我无法导入任何模块。

我是如何导入的: 我在包结构之外的 Jupyter 笔记本中,我尝试了以下方法:

import package(有效)

from package import utils(无效:ImportError

from package.utils import image_utils(无效:ModuleNotFoundError

from package.utils.image_utils import func(无效:ModuleNotFoundError

我也尝试使用相对导入在包的 __init__.py 中导入,但没有成功。我绝对不想每次想使用这些工具时都使用 sys.path.insert()。

我浏览了教程、文档和堆栈溢出。有人看到我错过了什么吗?

【问题讨论】:

  • 你不需要在标题中加上“(python 3.6)”。它可以作为标签使用。
  • 你能告诉我们你的__init__.py文件的内容吗?
  • @MFisherKDX init.py 文件目前是空的,但我也尝试过,只是相对导入 utils.image_utils
  • 试试这个:1.import package 2.print(dir(package)).一切都在那里吗?
  • @s3n0 不,一切都不存在。没有任何模块存在。输出只是:['builtins', 'cached', 'doc', 'file', ' loader', 'name', 'package', 'path', 'spec']

标签: python import module package python-3.6


【解决方案1】:

我发现以前的版本(在所有模块目录中没有正确的 __init__.py 文件或在包的 __init__.py 中没有导入语句)正在阻止识别我的最新安装。

为了解决这个问题,我首先尝试删除安装期间创建的所有文件: python setup.py install --record installfiles.txt

但这实际上并没有向我展示我需要删除的所有内容。

  1. 我还删除了包中的构建和缓存文件:build/、package/、dist/ 和 .egg-info/(以及所有缓存)
  2. 然后我删除了站点包:/anaconda3/envs/[env_name]/lib/python3.6/site-packages/[package_name]
  3. 并从 easy-install .pth 中删除了该软件包:/anaconda3/envs/[env_name]/lib/python3.6/site-packages/easy_install.pth
  4. 还有.egg-info:/anaconda3/envs/[env_name]/lib/python3.6/site-packages/[package-name].egg-info

这使我能够正确安装。感谢大家的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    • 2020-11-17
    • 1970-01-01
    • 2014-12-13
    • 1970-01-01
    • 2019-02-18
    相关资源
    最近更新 更多