通过前缀自动扩展Python项目中的所有导入

问题描述 投票:0回答:1

我正在尝试通过

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
扩展所有导入,而无需手动执行?无论如何,我再次发现没有它,代码更具可读性。

python-3.x setup.py python-packaging
1个回答
0
投票

有没有一种方便的方法可以通过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
© www.soinside.com 2019 - 2024. All rights reserved.