导入整个Python标准库

导入整个Python标准库,python,import,packaging,py2exe,Python,Import,Packaging,Py2exe,我需要一种方法将整个Python标准库导入到我的程序中 虽然这似乎是个坏主意,但我想这样做是因为py2exe将用我的程序打包整个标准库,这样我的用户就可以在我给他们的shell中从中导入 有没有一个简单的方法可以做到这一点 优点:我希望这个操作不会导入我在站点包中安装的包,这些包不是Python自带的。但是,这并不重要。嘿,我只是想到了一件事:我只需要一个stdlib中所有模块的列表,然后我会自动生成一个Python脚本,“手动”导入每个模块,如下所示: import re import mat

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

虽然这似乎是个坏主意,但我想这样做是因为py2exe将用我的程序打包整个标准库,这样我的用户就可以在我给他们的shell中从中导入

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


优点:我希望这个操作不会导入我在站点包中安装的包,这些包不是Python自带的。但是,这并不重要。

嘿,我只是想到了一件事:我只需要一个stdlib中所有模块的列表,然后我会自动生成一个Python脚本,“手动”导入每个模块,如下所示:

import re
import math
import time
# ...
然后把它包括在我的程序中

因此,我现在需要的是一个易于格式化的stdlib中所有模块/包的列表。现在我怎么知道

更新:

我得到的列表如下:我在虚拟机上安装了Python 2.6,然后在空闲状态下运行:

import pkgutil
stuff = [thing[1] for thing in pkgutil.iter_modules()]
stuff.sort() # To make it easy to look through
print(stuff)
然后copy将输出粘贴到我的IDE中,并编写一个小脚本:

if False:
    import re
    import email
    import time
    # ...
导入到我的程序中导入的Python模块中

它起作用了!py2exe打包了整个stdlib

更新:

我创建了一个这样做的包。我会在这里上传,但由于我没有看到任何上传按钮,您可以从我的项目文件夹中获取它:


它位于文件夹
src
中,该包名为
almostmortstdlib
,并有文档记录。

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


您可以查看源代码(废弃项目)

我在一个应用程序中有相同的要求,该应用程序使用库和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版本匹配。

什么?您正在编写一个通过预导入所有内容启动的shell?有什么可能的用例?要保存用户键入十几个字符的“导入此”?它不会预导入任何内容。但是为了让用户能够从stdlib导入内容,我需要在我的程序中导入它们(或者好像我正在导入它们),这样py2exe就会知道我需要它们,并将它们与我的可执行文件打包。这将需要您进行一点复制粘贴和格式化,但这是一项一次性任务:-)我将亲自动态生成它。看看我上面所说的:您可以使用相同的方法获得要包含的模块列表,并从中生成一个文件。这比手动维护要好。@Ram这么多年后,这有点随机,但我刚刚偶然发现你的帖子,它在为pyinstaller寻找同样的解决方案。我注意到PythonTurtle最近也改用了pyinstaller,我想知道你们是如何确保整个stdlib都与它捆绑在一起的。看起来你把
almostimportstdlib
放在了交换机旁边,尽管我可以收集到pyinstaller也将捆绑包限制为应用程序实际导入的包。如果你对此有任何提示的话,我会非常感激,因为我的谷歌Fu到目前为止让我失望了。您应该能够使用py2exe将其捆绑为一个资源,并在应用程序加载后将其添加到路径中:我知道您至少可以使用PyInstaller实现这一点。