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

使用setup.py构建Python包时遭遇ImportError问题求助

解决Python包console_scripts入口点模块找不到问题

问题描述

我正在尝试使用setup.py构建一个Python包,已设置console_scripts入口点play=treasurehunt:main,但运行play命令时出现模块找不到错误,而在VS Code中直接运行代码则无此问题。

项目目录结构

C:.
│   setup.py
│
├───build
│   ├───bdist.win-amd64
│   └───lib
│       └───treasure_hunt
│               death.py
│               energy.py
│               map.py
│               path_scenes.py
│               scenes.py
│               setup.py
│               treasurehunt.py
│               __init__.py
│
├───treasure_hunt
│   │   death.py
│   │   energy.py
│   │   map.py
│   │   path_scenes.py
│   │   scenes.py
│   │   setup.py
│   │   treasurehunt.py
│   │   __init__.py
│   │
│   ├───treasure_hunt.egg-info
│   │       dependency_links.txt
│   │       entry_points.txt
│   │       PKG-INFO
│   │       SOURCES.txt
│   │       top_level.txt
│   │
│   └───__pycache__
│           death.cpython-310.pyc
│           energy.cpython-310.pyc
│           energy.cpython-312.pyc
│           map.cpython-310.pyc
│           path_scenes.cpython-310.pyc
│           scenes.cpython-310.pyc
│           treasurehunt.cpython-312.pyc
│           __init__.cpython-312.pyc
│
└───treasure_hunt.egg-info
        dependency_links.txt
        entry_points.txt
        PKG-INFO
        SOURCES.txt
        top_level.txt

现有setup.py代码

try :
from setuptools import setup
except:
from distutils.tools import setup

config = {
"packages":["treasure_hunt"],
"entry_points":{
    "console_scripts":"play=treasurehunt:main"
}
}

setup(**config)

包含main()的treasurehunt.py代码

def main():
    from .energy import Energy
    from .scenes import *
    from .path_scenes import *

    scene_map = {
        "scene1":scenes.Scene1(),
        "scene2":scenes.Scene2(),
        "scene3":scenes.Scene3(),
        "scene4":scenes.Scene4(),
        "scene5":scenes.Scene5(),
        "scene6":scenes.Scene6(),
    }

    path_scene_map = {
        "scene1":path_scenes.Pathscene4(),
        "scene3":path_scenes.Pathscene1(),
        "scene2":path_scenes.Pathscene5(),
        "scene5":path_scenes.Pathscene3(),
        "scene4":path_scenes.Pathscene6(),
        "scene6":path_scenes.Pathscene2(),
    }

    name = "scene1"
    x = Energy()
    while True:
        energylevel = x.show()
        x.warning()
        path_scene_map[name].path()
        energylevel = energylevel-1
        name = scene_map[name].enter()
        energylevel = energylevel-1

错误原因及修复方案

核心错误

console_scripts入口点路径错误:treasurehunt.py属于treasure_hunt包的子模块,直接写treasurehunt:main无法让Python找到正确的模块,必须使用完整的包路径treasure_hunt.treasurehunt:main。

修复步骤

  1. 修正setup.py配置
    修改入口点路径,同时修复distutils的错误导入:

    try:
        from setuptools import setup
    except ImportError:
        from distutils.core import setup
    
    config = {
        "packages": ["treasure_hunt"],
        "entry_points": {
            "console_scripts": "play=treasure_hunt.treasurehunt:main"
        }
    }
    
    setup(**config)
    
  2. 清理冗余文件
    删除treasure_hunt子目录下的setup.py,避免包结构混淆。

  3. 重新安装包
    先卸载旧版本(如果已安装):

    pip uninstall treasure_hunt
    

    再用开发模式安装(方便后续修改测试):

    pip install -e .
    
  4. 验证修复
    直接运行play命令,即可正常执行main()函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 16:42:31