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

Python CLI项目入口点配置报错:ModuleNotFoundError问题排查

问题解决:CLI执行报错ModuleNotFoundError: No module named 'menu'

核心错误原因

main.py中的导入语句写法错误:

from menu import menu

这是全局模块的导入方式,当项目安装到site-packages后,Python会在全局模块路径查找menu,而你的menu.py属于my_project包的子模块,无法被全局路径识别。

修复步骤

修改main.py的导入语句,二选一即可:

方式1:绝对导入(推荐)

用完整的包路径导入子模块,清晰明确:

from my_project.menu import menu

def main():
    menu()

if __name__ == "__main__":
    main()

方式2:相对导入

使用相对路径表示当前包内的模块(注意开头的.):

from .menu import menu

def main():
    menu()

if __name__ == "__main__":
    main()

额外的配置优化建议

  1. 修复setup.py的语法错误
    setup()函数中long_description_content_type="text/markdown"后面缺少逗号,会导致打包失败,补充后:

    setup(
        name='My_project',
        version='0.0.1',
        author='John Doe',
        author_email='John.doe@test.com',
        license='MIT',
        description='CLI application.',
        long_description=long_description,
        long_description_content_type="text/markdown",  # 补充缺失的逗号
        install_requires=requirements,
        python_requires='>=3.10',
        packages=find_packages(),
        classifiers=[
            "Programming Language :: Python :: 3.10",
            "Operating System :: OS Independent",
        ],
        entry_points={
            'console_scripts': [
                'my_project=my_project.main:main'
            ]
        },
    )
    
  2. 正确读取requirements.txt
    当前读取requirements的方式会把整个文件转为单个字符串,不符合install_requires需要的列表格式,修改为:

    with open("requirements.txt", "r", encoding="utf-8") as fh:
        requirements = [line.strip() for line in fh if line.strip() and not line.startswith('#')]
    
  3. 统一配置文件
    setup.py和setup.cfg中都配置了包名、版本和入口点,建议保留其中一个(推荐用setup.cfg,更简洁易维护),删除重复配置避免冲突。

验证修复

修改后重新执行打包和安装:

python -m build
pip install dist/My_project-0.0.1-py3-none-any.whl --upgrade

再运行my_project命令即可正常执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 10:10:30