这是我的存储库的结构:
├── 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)
,但我不知道为什么。
答案 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