执行已安装Python包内脚本的标准方法是什么
问题原因
你的调用方式无法生效,核心是两个认知误区:
python3 <文件路径>语法的作用是让解释器执行当前工作目录下的本地文件,pip安装的包默认存放在Python环境专属的site-packages目录中,和你执行命令的当前路径不是同一个位置,解释器根本找不到对应文件。- 你用的点分隔加
.py后缀的写法,既不符合操作系统文件路径的命名规则,也不符合Python模块的调用规则。
标准实现方案
方案1:配置控制台脚本入口(官方推荐的规范做法)
这是Python打包标准定义的正式方案,配置完成后pip安装包时,会自动在当前Python环境的可执行目录(类Unix系统为bin目录,Windows为Scripts目录)生成独立的可执行文件,安装完成后直接敲命令就能运行,不需要手动指定Python解释器、不需要关心包的实际安装路径。
如果你用现在主流的PEP 621标准,也就是用pyproject.toml管理打包配置,直接添加如下段即可:
[project.scripts] # 等号左边是你安装后想直接用的命令名,右边格式固定为「包名.模块名:入口函数名」 my-script = "my_package.script:main"
这里的main对应你script.py里写的主执行函数,实际用的时候替换成你自己的函数名就行。
如果你还在用旧的setup.py管理打包配置,就给setup函数加entry_points参数:
from setuptools import setup setup( # 其他包配置项保持不变 entry_points = { "console_scripts": [ "my-script = my_package.script:main" ] } )
改完配置重新打包、安装,之后直接在终端敲my-script就能运行脚本。
方案2:用-m参数直接调用模块(无需改打包配置,适合临时使用)
如果只是临时跑一下脚本,不想改打包配置生成全局命令,可以用Python内置的-m参数,按照模块导入的路径规则调用,正确命令如下:
python3 -m my_package.script
注意两个细节:
- 路径用点分隔,和你平时写import语句的路径一致,不要写pip show里看到的物理文件路径,也不要加
.py后缀 - 你脚本里的执行逻辑要放在
if __name__ == "__main__":的判断块下面,用-m调用的时候才会正常触发执行,不然导入模块的时候就会提前跑逻辑。
内容的提问来源于stack exchange,提问作者kms333
相关产品推荐
相关产品推荐

