Chức năng này có thể được tìm thấy trong importlib.machinery
module. Bên trong, có rất nhiều các hằng số có liên quan đến các phần mở rộng mô-đun Python khác nhau:
>>> 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']
>>>
Vì vậy, bạn có thể rất dễ dàng tham gia các vào một tập hợp toàn cầu :
>>> set(importlib.machinery.SOURCE_SUFFIXES +
... importlib.machinery.OPTIMIZED_BYTECODE_SUFFIXES +
... importlib.machinery.EXTENSION_SUFFIXES +
... importlib.machinery.DEBUG_BYTECODE_SUFFIXES)
{'.pyw', '.py', '.pyd', '.pyc', '.pyo'}
>>>
Bạn có thể đặt cũng quan tâm đến số all_suffixes
function:
>>> importlib.machinery.all_suffixes()
['.py', '.pyw', '.pyc', '.pyd']
>>>
Tuy nhiên, lưu ý rằng chức năng này sẽ thay thế .pyc
bằng .pyo
nếu Python được khởi chạy với -O
or -OO
options. Để tránh điều này, bạn có thể làm:
>>> set(importlib.machinery.all_suffixes() +
... importlib.machinery.OPTIMIZED_BYTECODE_SUFFIXES +
... importlib.machinery.DEBUG_BYTECODE_SUFFIXES)
{'.pyw', '.py', '.pyd', '.pyc', '.pyo'}
>>>
này sẽ đảm bảo rằng cả hai .pyc
và .pyo
này nằm trong bộ.
Cuối cùng, bạn nên cảnh giác với importlib.machinery.BYTECODE_SUFFIXES
. Như @MartijnPieters đã lưu ý trong các nhận xét, nó sẽ luôn bằng OPTIMIZED_BYTECODE_SUFFIXES
hoặc DEBUG_BYTECODE_SUFFIXES
. Điều này có nghĩa là nếu bạn thêm nó vào bộ sưu tập, bạn sẽ nhận được .pyc
trùng lặp hoặc giá trị .pyo
trùng lặp (trừ khi bạn sử dụng một tập hợp khóa học).
Từ docs:
importlib.machinery.BYTECODE_SUFFIXES
Một danh sách các chuỗi đại diện cho các hậu tố tập tin được công nhận cho module bytecode. Đặt thành DEBUG_BYTECODE_SUFFIXES
hoặc OPTIMIZED_BYTECODE_SUFFIXES
dựa trên việc liệu __debug__
có đúng không.
Tôi không bận tâm khi sử dụng hằng số này vì tôi muốn cả hai OPTIMIZED_BYTECODE_SUFFIXES
và DEBUG_BYTECODE_SUFFIXES
trong bộ sưu tập. Vì vậy, không có lý do gì để thêm nó.
tôi quyết định sử dụng một bộ bởi vì họ có một thời gian tra cứu nhanh hơn so với danh sách. Có nghĩa là, chúng phù hợp hơn với tập hợp các giá trị toàn cầu sẽ không thay đổi và không cần thứ tự cụ thể. Ngoài ra, họ sẽ đảm bảo rằng chúng tôi không vô tình thêm các phần mở rộng trùng lặp vào bộ sưu tập.
Lưu ý rằng 'all_suffixes()' cũng bao gồm * mô-đun mở rộng *; trên máy Mac, nó cung cấp cho '['.py', '.pyc', '.cpython-34m.so', '.abi3.so', '.so']' chẳng hạn. –
Ngoài ra, hãy thêm hoặc 'importlib.machinery.OPTIMIZED_BYTECODE_SUFFIXES' hoặc' importlib.machinery.DEBUG_BYTECODE_SUFFIXES', bao giờ là * không * bằng 'importlib.machinery.BYTECODE_SUFFIXES'. Nếu không, bạn sẽ có '.pyo' * hai lần * khi chạy với' -O' hoặc '-OO'. –
Có, một bộ sẽ vẫn tốt hơn. Xem tài liệu ['importlib.machinery.BYTECODE_SUFFIXES'] (https: // docs.python.org/3/library/importlib.html # importlib.machinery.BYTECODE_SUFFIXES'): * Đặt thành' DEBUG_BYTECODE_SUFFIXES' hoặc 'OPTIMIZED_BYTECODE_SUFFIXES' dựa trên việc '__debug__' có đúng không. * –