导入整个Python标准库

时间:2009-07-30 14:06:51

标签: python import packaging py2exe

我需要一种方法将整个Python标准库导入我的程序。

虽然这可能看起来不错,但我想这样做是因为py2exe会将整个标准库打包到我的程序中,所以我的用户可以在我提供的shell中从中导入。

有一种简单的方法吗?

奖励积分:我希望此操作不会导入我在site-packages中安装的软件包,而不会导入Python附带的软件包。但是,这并不重要。

3 个答案:

答案 0 :(得分:2)

嘿,我只想到了一些事情:我只需要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打包整个stdlib。

<强>更新

我创建了一个执行此操作的包。我会在这里上传,但由于我没有看到任何上传按钮,你可以将它从我的项目文件夹中删除:

http://github.com/cool-RR/PythonTurtle/tree/master

它位于文件夹src中,该包名为almostimportstdlib,并且已记录在案。

答案 1 :(得分:1)

我从所有Python标准库创建了一个zip文件,然后在程序启动时将其添加到sys.path

您可以查看来源here(已放弃的项目)

答案 2 :(得分: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 版本相匹配。