如何配置setup.py实现包内.py文件无需包名前缀直接相互导入
解决方案
你可以通过调整setup.py的对应参数直接满足需求,两种可行配置方式如下:
- 方式1:将package_A下所有模块直接暴露到顶层
修改setup.py为以下内容:
from setuptools import find_packages, setup setup( packages=[""], package_dir={"": "src/package_A"}, )
该配置会把src/package_A目录作为顶层包路径安装,安装后可以直接用from file_1 import function的方式导入对应内容。
- 方式2:显式指定需要暴露的独立模块
如果只需要暴露部分py文件作为顶层模块,可以使用py_modules参数:
from setuptools import setup setup( py_modules=["file_1", "file_2"], package_dir={"": "src/package_A"}, )
额外兼容处理
如果需要保证package_A作为独立子模块运行时也不会出现导入错误,可以在package_A的__init__.py中添加路径动态追加逻辑:
import sys from pathlib import Path sys.path.append(str(Path(__file__).parent.absolute()))
该逻辑会在导入package_A时自动把当前目录加入Python搜索路径,无论package_A是作为项目子模块还是独立运行,都可以直接导入同目录下的其他py文件。
注意:不建议在生产环境大量使用顶层模块暴露的方式,容易和其他第三方包产生命名冲突。
内容的提问来源于stack exchange,提问作者This-is-patriiick
相关产品推荐
相关产品推荐

