导入整个Python标准库

5 投票
3 回答
2959 浏览
提问于 2025-04-15 13:17

我需要一种方法,把整个Python标准库导入到我的程序里。

虽然这听起来可能不是个好主意,但我想这样做是为了让py2exe把整个标准库打包到我的程序里,这样我的用户就可以在我提供的命令行中使用这些库。

有没有简单的方法可以做到这一点呢?

附加要求:我希望这个操作不会导入我在site-packages里安装的那些不是Python自带的包,不过这不是特别重要。

3 个回答

0

我在一个使用 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 版本一致。

1

我把所有的Python标准库打包成了一个zip文件,然后在程序启动时把这个zip文件添加到了sys.path里。

你可以在这里查看源代码(这个项目已经停止维护了)。

3

嘿,我刚想到一个主意:我只需要一个包含所有标准库模块的列表,然后我就可以自动生成一个Python脚本,手动导入每一个模块,就像这样:

import re
import math
import time
# ...

然后把这个脚本包含到我的程序里。

所以现在我需要的就是一个格式简单的标准库模块/包的列表。那我该怎么得到这个列表呢?

更新:

我这样得到了列表:我在一个虚拟机上安装了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,而且有文档说明。

撰写回答