如何从命令行运行Python .whl包的主函数或端点?
解决Python .whl文件运行时找不到__main__模块的问题
问题根源
直接用python mypack.whl执行时,Python会尝试将whl作为可执行zip包加载顶层的__main__.py,但你的配置是通过自定义entry_point分组(group_1)定义的入口,这种方式无法被直接运行whl的逻辑识别;同时如果包结构或打包配置有问题,也会导致找不到模块。
可行解决方案
方案1:通过pip run调用自定义entry_point
无需安装包,直接用pip调用你配置的入口点:
pip run --no-deps -m mypack run
参数说明:
--no-deps:避免自动安装依赖(按需使用)-m mypack:指定目标包名run:你在group_1里定义的入口名称
方案2:改用标准console_scripts入口点(推荐)
将entry_points改为Python标准的console_scripts分组,更符合生态规范,使用更便捷:
# setup.py 示例配置 entry_points={ 'console_scripts': [ 'mypack-start=__main__:main' ] }
重新打包后:
- 安装包后,直接在命令行输入
mypack-start即可运行main() - 无需安装的话,用
pip run --no-deps mypack-start执行
方案3:让whl支持直接用python运行
如果坚持要通过python mypack.whl执行,需满足两个条件:
- 包结构正确:确保
__main__.py在包的顶层目录,示例结构:mypack/ __init__.py __main__.py setup.py - 打包时设置zip_safe=False:在setup.py中添加配置,避免zip包导入限制:
setup( # 其他配置项... zip_safe=False )
重新打包后再尝试python mypack.whl。
内容的提问来源于stack exchange,提问作者valeriopa
相关产品推荐
相关产品推荐

