我需要一种将整个 Python 标准库导入我的程序的方法。
虽然这似乎是个坏主意,但我想这样做是为了让 py2exe 将整个标准库与我的程序一起打包,这样我的用户就可以在我给他们的 shell 中从它导入。
是否有捷径可寻?
加分项:我希望此操作不会导入我已安装在站点包中且 Python 未附带的包。然而,这并不重要。
嘿,我刚想到一件事:我只需要 stdlib 中所有模块的列表,然后我会自动生成一个 Python 脚本,“手动”导入每个模块,如下所示:
import re
import math
import time
# ...
然后将其包含在我的程序中。
所以我现在需要的是一个简单格式化的 stdlib 中所有模块/包的列表。现在我怎么得到它?
更新:
我得到了这样的列表:我在虚拟机上安装了 Python 2.6,然后在 IDLE 中运行:
import pkgutil
stuff = [thing[1] for thing in pkgutil.iter_modules()]
stuff.sort() # To make it easy to look through
print(stuff)
然后将输出复制粘贴到我的IDE中,并制作了一个小脚本来编写:
if False:
import re
import email
import time
# ...
进入我在程序中导入的 Python 模块。
有用!py2exe 打包整个标准库。
更新:
我创建了一个包来执行此操作。我会在这里上传它,但由于我没有看到任何上传按钮,你可以从我的项目文件夹中获取它:
http://github.com/cool-RR/PythonTurtle/tree/master
它在文件夹src
中,包被调用almostimportstdlib
并记录在案。
我从所有 Python 标准库创建了一个 zip 文件,然后将其添加到sys.path
程序启动时。
您可以在这里查看源代码(废弃项目)
我在使用pyinstaller的应用程序中有相同的要求,并通过使用stdlib_list库和 pyinstaller 的隐藏导入解决了这个问题。示例规范文件:
from stdlib_list import stdlib_list
hidden_imports = []
hidden_imports.extend(stdlib_list("3.9"))
a = Analysis(['myapp.py'],
pathex=["."],
binaries=[],
datas=[],
hiddenimports=hidden_imports,
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
...
该版本必须与您在应用程序中使用的 python 版本相匹配。