You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

已安装Python3私有包,调用时提示找不到__main__模块的问题咨询

问题分析与解决方案

首先得拆解你两种调用方式的本质差异,这是搞懂问题的核心:

为什么绝对路径调用正常?

/Library/Frameworks/Python.framework/Versions/3.6/bin/tool 是你运行 setup.py install 后,Python自动生成的可执行入口脚本。这个脚本已经被setup.py配置好了:它会绑定你安装时用的那个3.6版本解释器,并且明确知道去哪里找到你的tool模块的__main__入口,所以能正常运行。

为什么python3 tool --help会报错?

这个命令的逻辑和绝对路径调用完全不同,报错大概率是以下几种情况之一:

1. 用错了模块运行的语法

直接写python3 tool会让Python把tool当成一个单独的.py文件来查找,但你的__main__.py应该是在tool这个包目录里(比如project/tool/__main__.py)。正确运行模块的方式是用-m参数,告诉Python去查找并运行整个模块:

# 如果你在项目源码根目录下
python3 -m tool --help

2. 当前目录不对,Python找不到你的模块

如果你不在项目源码目录下,或者tool模块所在的路径没被加入Python的sys.path,Python就找不到这个模块。这时候即使加了-m参数也会报错,解决办法要么切换到项目根目录,要么临时把项目路径加入PYTHONPATH

# 临时添加项目路径到PYTHONPATH
export PYTHONPATH=/path/to/your/project:$PYTHONPATH
python3 -m tool --help

3. 多个Python环境冲突(最可能的原因)

看报错信息里的解释器路径是/usr/local/bin/python3.6,但你安装包用的是/Library/Frameworks/Python.framework/Versions/3.6/bin/python3——这两个大概率是不同的Python环境!也就是说,你把tool安装到了前者的site-packages里,但运行python3时调用的是后者的解释器,这个环境里根本没装你的tool包,自然找不到__main__模块。

验证这个问题的方法:

# 查看当前python3指向哪个解释器
which python3
# 查看你安装时用的python3指向哪个
cd project && which python3

如果输出路径不一样,就实锤是环境冲突了。解决办法是用安装时的那个解释器来运行:

/Library/Frameworks/Python.framework/Versions/3.6/bin/python3 -m tool --help

或者直接用绝对路径的tool脚本运行,这是最稳妥的方式。

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

火山引擎 最新活动