gpt4 book ai didi

python - 有没有一种简单的方法来获取所有常见的模块扩展?

转载 作者:太空狗 更新时间:2023-10-29 22:30:12 25 4
gpt4 key购买 nike

我正在制作一个处理 Python 模块的库。不深入细节,我需要一个常见 Python 模块扩展的列表。

显然,我想要 .py,但我还想包含 .pyw.pyd 等。换句话说,我想要任何你可以导入的东西。

标准库中是否有工具可以为我制作此列表?还是我必须自己制作(并对所有值进行硬编码)?

extensions = ['.py', '.pyw', ...]

最佳答案

此功能可以在 importlib.machinery module 中找到.在内部,有许多与各种 Python 模块扩展相关的常量:

>>> import importlib
>>> importlib.machinery.SOURCE_SUFFIXES
['.py', '.pyw']
>>> importlib.machinery.OPTIMIZED_BYTECODE_SUFFIXES
['.pyo']
>>> importlib.machinery.EXTENSION_SUFFIXES
['.pyd']
>>> importlib.machinery.DEBUG_BYTECODE_SUFFIXES
['.pyc']
>>>

因此,您可以很容易地将它们加入一个全局集合1:

>>> set(importlib.machinery.SOURCE_SUFFIXES +
... importlib.machinery.OPTIMIZED_BYTECODE_SUFFIXES +
... importlib.machinery.EXTENSION_SUFFIXES +
... importlib.machinery.DEBUG_BYTECODE_SUFFIXES)
{'.pyw', '.py', '.pyd', '.pyc', '.pyo'}
>>>

您可能还对 all_suffixes function 感兴趣:

>>> importlib.machinery.all_suffixes()
['.py', '.pyw', '.pyc', '.pyd']
>>>

但是请注意,如果使用 -O or -OO options 启动 Python,此函数会将 .pyc 替换为 .pyo .为避免这种情况,您可以这样做:

>>> set(importlib.machinery.all_suffixes() +
... importlib.machinery.OPTIMIZED_BYTECODE_SUFFIXES +
... importlib.machinery.DEBUG_BYTECODE_SUFFIXES)
{'.pyw', '.py', '.pyd', '.pyc', '.pyo'}
>>>

这将确保 .pyc.pyo 都在集合中。


最后,您应该警惕 importlib.machinery.BYTECODE_SUFFIXES。正如@MartijnPieters 在评论中指出的那样,它将始终等于 OPTIMIZED_BYTECODE_SUFFIXESDEBUG_BYTECODE_SUFFIXES。这意味着如果您将它添加到集合中,您将得到一个重复的 .pyc 或一个重复的 .pyo 值(当然除非您使用一组)。

来自docs :

importlib.machinery.BYTECODE_SUFFIXES

A list of strings representing the recognized file suffixes for bytecode modules. Set to either DEBUG_BYTECODE_SUFFIXES or OPTIMIZED_BYTECODE_SUFFIXES based on whether __debug__ is true.

不过我没有费心使用这个常量,因为我想要集合中的 OPTIMIZED_BYTECODE_SUFFIXESDEBUG_BYTECODE_SUFFIXES。所以,没有理由添加它。


1我决定使用集合,因为它们的查找时间比列表快。这意味着,它们更适合不会改变且不需要特定顺序的全局值集合。此外,他们将确保我们不会意外地向集合中添加重复的扩展。

关于python - 有没有一种简单的方法来获取所有常见的模块扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27569690/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com