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

setup.py提示mydogs模块已安装,但Python无法导入该模块的问题

问题原因与解决方法

核心问题

你在setup.py里用py_modules=['junie', 'lucy']声明的是两个独立的顶层模块,而非名为mydogs的Python包。安装完成后,Python只能识别junie和lucy这两个单独模块,所以直接import mydogs会提示找不到模块。

解决办法

方法1:直接使用已安装的模块

既然安装的是独立模块,直接导入junie或lucy就能正常调用:

>>> import junie
>>> junie.junie()
Junie says hi
>>> import lucy
>>> lucy.lucy()
Lucy says hi

方法2:改成标准包结构(推荐)

如果希望通过import mydogs来统一使用这两个模块,需要调整为标准Python包结构:

  1. 重构目录结构:
root
 |- setup.py
 |- mydogs/
     |- __init__.py
     |- junie.py
     |- lucy.py
  1. 修改setup.py,把py_modules替换为packages参数:
# setup.py
from distutils.core import setup

setup(
    name='mydogs',
    version='1.0',    
    packages=['mydogs']
)
  1. (可选)在mydogs/__init__.py中导出模块函数,简化调用:
# mydogs/__init__.py
from .junie import junie
from .lucy import lucy
  1. 用现代工具重新安装(替代已废弃的setup.py install):
# 先卸载旧版本
pip uninstall mydogs
# 本地安装包
pip install .

之后就能正常导入mydogs并使用:

>>> import mydogs
>>> mydogs.junie()
Junie says hi
>>> mydogs.lucy()
Lucy says hi

方法3:不调整目录的折中方案(不推荐)

如果不想改目录结构,也可以在setup.py中添加packages配置,同时创建mydogs/__init__.py文件,但这种方式不够规范,长期维护容易出问题:

# setup.py
from distutils.core import setup

setup(
    name='mydogs',
    version='1.0',    
    py_modules=['junie', 'lucy'],
    packages=['mydogs']
)

本质还是依赖包结构,不如直接改成标准结构清晰。

额外提醒

安装日志里已经明确提示setup.py install已被废弃,建议使用pip install .或者python -m build生成wheel包后再用pip install dist/*.whl的方式安装,避免兼容性问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 04:20:22