可以导入python包,但不能导入其模块

时间:2019-03-14 23:46:53

标签: python import module package python-3.6

我正在包装要用于脚本和调试的一组工具。虽然可以导入程序包本身,但是每次尝试导入程序包中的模块时,我都会得到一个ModuleNotFoundError

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

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

__ init __。py: 我的理解是,自从我运行python3.6以来,我不需要__init__.py文件,但是我已经尝试在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()。

我已经仔细研究了教程,文档和堆栈溢出。有人看到我想念的东西吗?

1 个答案:

答案 0 :(得分:0)

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

要解决此问题,我首先尝试删除安装过程中创建的所有文件: from Tkinter import *

但是,这实际上并未向我显示我需要删除的所有内容。

  1. 我还删除了程序包中的构建和缓存文件:build /,package /,dist /和.egg-info /(以及所有缓存)
  2. 然后我删除了站点软件包:/anaconda3/envs/[env_name]/lib/python3.6/site-packages/[package_name]
  3. 并从易于安装的.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

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