我正在尝试通过
setup.py
将我的 python 3.11.3 项目转换为包。大致结构是这样的
- project_name/
- setup.py
- project_name/
- sub_module/
- __init__.py
- file_containing_class.py
当我编写代码时,我从内部
project_name
文件夹中运行所有脚本。这很方便,因为导入这样更具可读性。例如,我可以写入 __init__.py
文件
from sub_module.file_containing_class import SomeClass
而不是
from project_name.sub_module.file_containing_class import SomeClass
但是,当我有
setup.py
喜欢
from setuptools import setup, find_packages
setup(
name='project_name',
version='1.0.1',
url=None,
author='Joe',
packages=find_packages(),
classifiers=[
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
],
)
我在上面的导入中遇到错误
ModuleNotFoundError: No module named 'sub_module'
(大概)因为它没有
project_name
前缀。有没有一种方便的方法可以通过 project_name
扩展所有导入,而无需手动执行?无论如何,我再次发现没有它,代码更具可读性。
有没有一种方便的方法可以通过project_name扩展所有导入而无需手动执行?
是的。添加一个文件
project_name/project_name/__init__.py
(按照您的布局),内容如下。
from .sub_module.file_containing_class import SomeClass
__all__ = [
"SomeClass"
]
如果您这样做,那么在安装项目后(例如,从
pip install .
所在的目录中安装 setup.py
),您将能够执行以下操作(从任何目录)。
from project_name import SomeClass