如何通过Python Launcher运行已安装的Python脚本?
解决Python Launcher调用已安装脚本(如PyInstaller)的问题
嘿,我懂你现在的困扰——用py.exe指定Python版本跑脚本、调用pip都很顺畅,但就是没法直接用py -3.5 -m pyinstaller调用已安装的PyInstaller对吧?别着急,这里有几个实用的解决方法:
方法一:直接调用PyInstaller的子模块入口
这是最直接的方案,不需要额外操作。PyInstaller的执行入口其实藏在它的__main__子模块里,你只需要把命令改成:
py -3.5 -m pyinstaller.__main__ helloworld.py
比如要查看PyInstaller版本,就用:
py -3.5 -m pyinstaller.__main__ --version
这样就能通过Python Launcher直接调用对应版本的PyInstaller,完全不用记繁琐的安装路径。
方法二:用pip run命令(通用所有第三方脚本)
如果你觉得记子模块名麻烦,pip自带的run子命令可以帮你一键调用对应版本安装的脚本,不管它存在哪个路径:
py -3.5 -m pip run pyinstaller helloworld.py
这个命令会自动定位到Python 3.5对应的pip安装的PyInstaller脚本并执行,通用性拉满,适合各种第三方工具脚本。
方法三:自定义顶层模块(模拟标准-m调用)
如果你就想让py -3.5 -m pyinstaller这个命令完全生效,可以手动创建一个顶层模块文件:
- 找到Python 3.5的
Lib/site-packages目录(比如你这里是C:\Python35\Lib\site-packages) - 在里面新建一个名为
pyinstaller.py的文件,内容如下:
from pyinstaller.__main__ import run import sys if __name__ == "__main__": run(sys.argv[1:])
之后你就能直接用py -3.5 -m pyinstaller来调用了,和你最初期望的用法完全一致。
为什么原来的命令不行?
简单来说,PyInstaller的模块结构没有把顶层的pyinstaller模块设置为可直接通过-m调用的入口,它的核心执行逻辑都放在了pyinstaller.__main__这个子模块里,所以直接用-m pyinstaller会提示找不到模块入口。上面的方法都是绕开这个结构限制的解决方案。
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

