iCo*_*dez 6 python file-extension python-import python-3.x
我正在创建一个处理Python模块的库.没有详细介绍,我需要一个常见的Python模块扩展列表.
很显然,我想.py
,但我也想加入的,如.pyw
,.pyd
等.换句话说,我想要的东西,你可以导入.
标准库中是否有一个工具可以为我制作这个列表?或者我必须自己制作(并硬编码所有值)?
extensions = ['.py', '.pyw', ...]
Run Code Online (Sandbox Code Playgroud)
此功能可在importlib.machinery
模块中找到.在里面,有许多常量与各种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']
>>>
Run Code Online (Sandbox Code Playgroud)
所以,你可以很容易地将它们加入到全局集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'}
>>>
Run Code Online (Sandbox Code Playgroud)
您可能也对该all_suffixes
功能感兴趣:
>>> importlib.machinery.all_suffixes()
['.py', '.pyw', '.pyc', '.pyd']
>>>
Run Code Online (Sandbox Code Playgroud)
但请注意.pyc
,.pyo
如果使用-O
或-OO
选项启动Python ,则此函数将替换.为避免这种情况,您可以:
>>> set(importlib.machinery.all_suffixes() +
... importlib.machinery.OPTIMIZED_BYTECODE_SUFFIXES +
... importlib.machinery.DEBUG_BYTECODE_SUFFIXES)
{'.pyw', '.py', '.pyd', '.pyc', '.pyo'}
>>>
Run Code Online (Sandbox Code Playgroud)
这将确保双方.pyc
并.pyo
在设定的.
最后,你应该警惕importlib.machinery.BYTECODE_SUFFIXES
.正如@MartijnPieters在评论中指出的那样,它总是等于OPTIMIZED_BYTECODE_SUFFIXES
或者DEBUG_BYTECODE_SUFFIXES
.这意味着如果将其添加到集合中,您将获得.pyc
重复.pyo
值或重复值(除非您使用一组过程).
来自文档:
importlib.machinery.BYTECODE_SUFFIXES
表示字节码模块的已识别文件后缀的字符串列表.设置为
DEBUG_BYTECODE_SUFFIXES
或者OPTIMIZED_BYTECODE_SUFFIXES
基于是否__debug__
为真.
我没有打扰使用这个常量,因为我想要两个OPTIMIZED_BYTECODE_SUFFIXES
并且DEBUG_BYTECODE_SUFFIXES
在集合中.所以,没有理由添加它.
1我决定使用一个集合,因为它们的查找时间比列表快.意思是,它们更适合全球价值观的收集,这些价值观不会改变,也不需要特定的订单.此外,他们还将确保我们不会意外地向集合中添加重复的扩展.
归档时间: |
|
查看次数: |
135 次 |
最近记录: |