无法导入最近创建的包

时间:2018-12-11 12:31:01

标签: python python-3.x

这是我的存储库的结构:

├── README.md
├── core
│   ├── Dockerfile
│   ├── entrypoint.sh
│   ├── requirements.txt
│   ├── sentinel.py
│   └── site.conf
└── python_package
    ├── sentinel
    │   ├── __init__.py
    │   └── sentinel.py
    └── setup.py

它有两个目录。主要的是core,其中包含服务本身的代码。我想创建一个与该服务交互的帮助程序包,因此我创建了python_package并将一个帮助程序类(sentinel.py)添加到Sentinel中。 __init__.py为空。

setup.py的内容是:

from setuptools import setup, find_packages


setup(name='sentinel',
      version='0.1',
      description='Client to interact with the Sentinel service',
      url='https://foo/bar/sentinel.git',
      author='yzT',
      author_email='yzT@example.com',
      packages=find_packages(),
      install_requires='requests')

当我激活virtualenv并安装pip install .时,软件包与requests依赖项一起安装。如果这样的话,我打开python终端并尝试导入类from sentinel import Sentinel,则报告为ImportError: cannot import name 'Sentinel' from 'sentinel' (/Users/yzT/sentinel/python_package/sentinel/__init__.py),但我不知道为什么。

1 个答案:

答案 0 :(得分:2)

如果我正确理解了您的问题,则该软件包为sentinel,它包含一个sentinel.py模块,而该模块又包含一个Sentinel类。在这种情况下,您必须添加一个级别:

from sentinel.sentinel import Sentinel

或者,您可以通过其__init__.py文件将一些符号导入包中。如果python_package/sentinel/__init__.py包含(请注意点(.)):

from .sentinel import Sentinel

然后Sentinel符号将直接存在于包中,并且您可以在外部脚本中使用该符号:

from .sentinel import Sentinel