You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Setuptools分发单模块Python包如何实现指定名称直接导入

你的问题核心是PyPI分发包名(setup函数中name字段指定的gerador_endereco)和实际代码的可导入包目录名没有对应,find_packages()默认会扫描所有包含__init__.py的目录作为可导入包,你当前的代码目录名为my_package,所以安装后可导入的根包名就是my_package,和PyPI上的分发包名相互独立。

你可以通过以下两种方案调整实现预期的导入效果:

方案1:调整目录结构(最推荐,兼容性最好)

直接修改代码目录的名称,让可导入包名和分发包名保持一致,操作步骤如下:

  • 将原my_package文件夹重命名为gerador_endereco,调整后的仓库结构为:
gerador_endereco/
-- setup.py
-- gerador_endereco/
   -- __init__.py
   -- gerador_endereco.py
  • 编辑gerador_endereco/__init__.py,添加内容将子模块的公开内容导出:
from .gerador_endereco import *
  • setup.py无需修改,find_packages()会自动识别到gerador_endereco目录作为可导入包。重新打包上传新版本到PyPI后,就可以直接通过from gerador_endereco import *导入使用。

方案2:保留现有目录结构,修改setup.py配置

如果不想调整现有目录结构,可以通过package_dir参数指定包的映射关系,操作步骤如下:

  • 修改setup.py中的配置,替换原有的packages=find_packages()配置:
setup(
    name='gerador_endereco',
    version='1.0.4',
    author='Michel Metran',
    description='API para criação ...',
    url='https://github.com/open-dsa/gerador_endereco',
    packages=['gerador_endereco'],
    package_dir={'gerador_endereco': 'my_package'},
    install_requires=requirements,
)
  • 和方案1相同,编辑my_package/__init__.py,添加内容导出子模块的公开内容:
from .gerador_endereco import *
  • 重新打包上传新版本到PyPI后即可实现预期的导入效果。

两种方案调整完成后,都需要升级版本号重新打包上传,本地升级安装对应新版本后即可正常使用from gerador_endereco import *的导入方式。

内容的提问来源于stack exchange,提问作者Michel Metran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 02:39:04