sysconfig --- Cung cấp quyền truy cập vào thông tin cấu hình của Python

Added in version 3.2.

Source code: Lib/sysconfig


Mô-đun sysconfig cung cấp quyền truy cập vào thông tin cấu hình của Python như danh sách đường dẫn cài đặt và các biến cấu hình phù hợp với nền tảng hiện tại.

Biến cấu hình

Bản phân phối Python chứa tệp tiêu đề Makefilepyconfig.h cần thiết để xây dựng cả chính tệp nhị phân Python và tiện ích mở rộng C của bên thứ ba được biên dịch bằng setuptools.

sysconfig đặt tất cả các biến được tìm thấy trong các tệp này vào một từ điển có thể được truy cập bằng get_config_vars() hoặc get_config_var().

Lưu ý rằng trên Windows, đó là một bộ nhỏ hơn nhiều.

sysconfig.get_config_vars(*args)

Không có đối số, hãy trả về từ điển gồm tất cả các biến cấu hình có liên quan đến nền tảng hiện tại.

Với các đối số, trả về danh sách các giá trị có được từ việc tra cứu từng đối số trong từ điển biến cấu hình.

Đối với mỗi đối số, nếu không tìm thấy giá trị, hãy trả về None.

sysconfig.get_config_var(name)

Trả về giá trị của một biến duy nhất name. Tương đương với get_config_vars().get(name).

Nếu không tìm thấy name, hãy trả về None.

Ví dụ về cách sử dụng:

>>> nhập cấu hình hệ thống
>>> sysconfig.get_config_var('Py_ENABLE_SHARED')
0
>>> sysconfig.get_config_var('LIBDIR')
'/usr/local/lib'
>>> sysconfig.get_config_vars('AR', 'CXX')
['ar', 'g++']

Đường dẫn cài đặt

Python sử dụng sơ đồ cài đặt khác nhau tùy thuộc vào nền tảng và các tùy chọn cài đặt. Các lược đồ này được lưu trữ trong sysconfig dưới các mã định danh duy nhất dựa trên giá trị được trả về bởi os.name. Các lược đồ này được người cài đặt gói sử dụng để xác định nơi sao chép tệp vào.

Python hiện hỗ trợ chín lược đồ:

  • posix_prefix: lược đồ dành cho các nền tảng POSIX như Linux hoặc macOS. Đây là lược đồ mặc định được sử dụng khi cài đặt Python hoặc một thành phần.

  • posix_home: sơ đồ dành cho nền tảng POSIX, khi sử dụng tùy chọn home. Lược đồ này xác định các đường dẫn nằm dưới tiền tố nhà cụ thể.

  • posix_user: sơ đồ dành cho nền tảng POSIX, khi sử dụng tùy chọn user. Lược đồ này xác định các đường dẫn nằm trong thư mục chính của người dùng (site.USER_BASE).

  • posix_venv: sơ đồ dành cho Python virtual environments trên nền tảng POSIX; theo mặc định nó giống như posix_prefix.

  • nt: sơ đồ dành cho Windows. Đây là lược đồ mặc định được sử dụng khi cài đặt Python hoặc một thành phần.

  • nt_user: lược đồ dành cho Windows, khi sử dụng tùy chọn user.

  • nt_venv: lược đồ cho Python virtual environments trên Windows; theo mặc định nó giống như nt.

  • venv: lược đồ có các giá trị từ posix_venv hoặc nt_venv tùy thuộc vào nền tảng Python chạy trên đó.

  • osx_framework_user: lược đồ dành cho macOS, khi sử dụng tùy chọn user.

Mỗi lược đồ bao gồm một loạt các đường dẫn và mỗi đường dẫn có một mã định danh duy nhất. Python hiện đang sử dụng tám đường dẫn:

  • stdlib: thư mục chứa các tệp thư viện Python tiêu chuẩn không dành riêng cho nền tảng.

  • platstdlib: thư mục chứa các tệp thư viện Python tiêu chuẩn dành riêng cho nền tảng.

  • platlib: thư mục dành cho các tệp dành riêng cho trang web, nền tảng cụ thể.

  • purelib: thư mục dành cho các tệp dành riêng cho trang web, không dành riêng cho nền tảng (Python 'thuần túy').

  • include: thư mục chứa các tệp tiêu đề không dành riêng cho nền tảng cho Python C-API.

  • platinclude: thư mục chứa các tệp tiêu đề dành riêng cho nền tảng cho Python C-API.

  • scripts: thư mục chứa file script.

  • data: thư mục chứa file dữ liệu.

Lược đồ người dùng

Lược đồ này được thiết kế để trở thành giải pháp thuận tiện nhất cho người dùng không có quyền ghi vào thư mục gói trang web toàn cầu hoặc không muốn cài đặt vào đó.

Các tập tin sẽ được cài đặt vào thư mục con của site.USER_BASE (sau đây viết là userbase). Lược đồ này cài đặt các mô-đun Python thuần túy và các mô-đun mở rộng ở cùng một vị trí (còn được gọi là site.USER_SITE).

posix_user

Đường dẫn

Thư mục cài đặt

stdlib

userbase/lib/pythonX.Y

platstdlib

userbase/lib/pythonX.Y

platlib

userbase/lib/pythonX.Y/site-packages

purelib

userbase/lib/pythonX.Y/site-packages

include

userbase/include/pythonX.Y

scripts

userbase/bin

data

userbase

nt_user

Đường dẫn

Thư mục cài đặt

stdlib

userbase\PythonXY

platstdlib

userbase\PythonXY

platlib

userbase\PythonXY\site-packages

purelib

userbase\PythonXY\site-packages

include

userbase\PythonXY\Include

scripts

userbase\PythonXY\Scripts

data

userbase

osx_framework_user

Đường dẫn

Thư mục cài đặt

stdlib

userbase/lib/python

platstdlib

userbase/lib/python

platlib

userbase/lib/python/site-packages

purelib

userbase/lib/python/site-packages

include

userbase/include/pythonX.Y

scripts

userbase/bin

data

userbase

Đề án nhà

Ý tưởng đằng sau "sơ đồ gia đình" là bạn xây dựng và duy trì một kho mô-đun Python cá nhân. Tên của lược đồ này bắt nguồn từ ý tưởng về thư mục "home" trên Unix, vì không có gì lạ khi người dùng Unix tạo thư mục chính của họ có bố cục tương tự như /usr/ hoặc /usr/local/. Bất kỳ ai cũng có thể sử dụng lược đồ này, bất kể họ đang cài đặt hệ điều hành nào.

posix_home

Đường dẫn

Thư mục cài đặt

stdlib

home/lib/python

platstdlib

home/lib/python

platlib

home/lib/python

purelib

home/lib/python

include

home/include/python

platinclude

home/include/python

scripts

home/bin

data

home

Lược đồ tiền tố

"Lược đồ tiền tố" rất hữu ích khi bạn muốn sử dụng một bản cài đặt Python để thực hiện quá trình xây dựng/cài đặt (tức là để chạy tập lệnh thiết lập), nhưng cài đặt các mô-đun vào thư mục mô-đun bên thứ ba của một bản cài đặt Python khác (hoặc thứ gì đó trông giống như một bản cài đặt Python khác). Nếu điều này nghe có vẻ hơi bất thường thì đó là---đó là lý do tại sao các chương trình dành cho người dùng và gia đình lại xuất hiện trước. Tuy nhiên, có ít nhất hai trường hợp đã biết trong đó sơ đồ tiền tố sẽ hữu ích.

Đầu tiên, hãy xem xét rằng nhiều bản phân phối Linux đặt Python trong /usr, thay vì /usr/local truyền thống hơn. Điều này hoàn toàn phù hợp, vì trong những trường hợp đó Python là một phần của "hệ thống" chứ không phải là một tiện ích bổ sung cục bộ. Tuy nhiên, nếu bạn đang cài đặt các mô-đun Python từ nguồn, bạn có thể muốn chúng ở dạng /usr/local/lib/python2.X thay vì /usr/lib/python2.X.

Một khả năng khác là hệ thống tệp mạng trong đó tên được sử dụng để ghi vào thư mục từ xa khác với tên được sử dụng để đọc nó: ví dụ: trình thông dịch Python được truy cập dưới dạng /usr/local/bin/python có thể tìm kiếm các mô-đun trong /usr/local/lib/python2.X, nhưng các mô-đun đó sẽ phải được cài đặt vào /mnt/@server/export/lib/python2.X.

posix_prefix

Đường dẫn

Thư mục cài đặt

stdlib

prefix/lib/pythonX.Y

platstdlib

prefix/lib/pythonX.Y

platlib

prefix/lib/pythonX.Y/site-packages

purelib

prefix/lib/pythonX.Y/site-packages

include

prefix/include/pythonX.Y

platinclude

prefix/include/pythonX.Y

scripts

prefix/bin

data

prefix

nt

Đường dẫn

Thư mục cài đặt

stdlib

prefix\Lib

platstdlib

prefix\Lib

platlib

prefix\Lib\site-packages

purelib

prefix\Lib\site-packages

include

prefix\Include

platinclude

prefix\Include

scripts

prefix\Scripts

data

prefix

Chức năng đường dẫn cài đặt

sysconfig cung cấp một số chức năng để xác định các đường dẫn cài đặt này.

sysconfig.get_scheme_names()

Trả về một bộ chứa tất cả các lược đồ hiện được hỗ trợ trong sysconfig.

sysconfig.get_default_scheme()

Trả về tên lược đồ mặc định cho nền tảng hiện tại.

Added in version 3.10: Chức năng này trước đây được đặt tên là _get_default_scheme() và được coi là một chi tiết triển khai.

Thay đổi trong phiên bản 3.11: Khi Python chạy từ môi trường ảo, lược đồ venv sẽ được trả về.

sysconfig.get_preferred_scheme(key)

Trả về tên lược đồ ưa thích cho bố cục cài đặt được chỉ định bởi key.

key phải là "prefix", "home" hoặc "user".

Giá trị trả về là tên lược đồ được liệt kê trong get_scheme_names(). Nó có thể được chuyển tới các hàm sysconfig có đối số scheme, chẳng hạn như get_paths().

Added in version 3.10.

Thay đổi trong phiên bản 3.11: Khi Python chạy từ môi trường ảo và key="prefix", lược đồ venv sẽ được trả về.

sysconfig._get_preferred_schemes()

Trả về một lệnh chứa tên lược đồ ưa thích trên nền tảng hiện tại. Người triển khai và nhà phân phối lại Python có thể thêm các lược đồ ưa thích của họ vào giá trị toàn cầu cấp mô-đun _INSTALL_SCHEMES và sửa đổi hàm này để trả về các tên lược đồ đó, ví dụ: cung cấp các lược đồ khác nhau để người quản lý gói ngôn ngữ và hệ thống sử dụng, do đó các gói được cài đặt bởi một trong hai không trộn lẫn với các gói của gói kia.

Người dùng cuối không nên sử dụng chức năng này mà thay vào đó là get_default_scheme()get_preferred_scheme().

Added in version 3.10.

sysconfig.get_path_names()

Trả về một bộ chứa tất cả tên đường dẫn hiện được hỗ trợ trong sysconfig.

sysconfig.get_path(name[, scheme[, vars[, expand]]])

Trả về đường dẫn cài đặt tương ứng với đường dẫn name, từ sơ đồ cài đặt có tên scheme.

name phải là một giá trị trong danh sách được get_path_names() trả về.

sysconfig lưu trữ các đường dẫn cài đặt tương ứng với từng tên đường dẫn, cho từng nền tảng, với các biến số có thể mở rộng. Ví dụ: đường dẫn stdlib cho sơ đồ nt là: {base}/Lib.

get_path() sẽ sử dụng các biến được trả về bởi get_config_vars() để mở rộng đường dẫn. Tất cả các biến đều có giá trị mặc định cho từng nền tảng nên người ta có thể gọi hàm này và nhận giá trị mặc định.

Nếu scheme được cung cấp thì đó phải là giá trị từ danh sách được get_scheme_names() trả về. Nếu không, sơ đồ mặc định cho nền tảng hiện tại sẽ được sử dụng.

Nếu vars được cung cấp, nó phải là một từ điển chứa các biến sẽ cập nhật từ điển được trả về bởi get_config_vars().

Nếu expand được đặt thành False, đường dẫn sẽ không được mở rộng bằng các biến.

Nếu không tìm thấy name, hãy tăng KeyError.

sysconfig.get_paths([scheme[, vars[, expand]]])

Trả về một từ điển chứa tất cả các đường dẫn cài đặt tương ứng với sơ đồ cài đặt. Xem get_path() để biết thêm thông tin.

Nếu scheme không được cung cấp, sẽ sử dụng sơ đồ mặc định cho nền tảng hiện tại.

Nếu vars được cung cấp, nó phải là một từ điển gồm các biến sẽ cập nhật từ điển được sử dụng để mở rộng đường dẫn.

Nếu expand được đặt thành false, đường dẫn sẽ không được mở rộng.

Nếu scheme không phải là sơ đồ hiện có, get_paths() sẽ đưa ra KeyError.

Các chức năng khác

sysconfig.get_python_version()

Trả về số phiên bản Python MAJOR.MINOR dưới dạng chuỗi. Tương tự với '%d.%d' % sys.version_info[:2]

sysconfig.get_platform()

Trả về một chuỗi xác định nền tảng hiện tại.

Điều này được sử dụng chủ yếu để phân biệt các thư mục xây dựng dành riêng cho nền tảng và các bản phân phối được xây dựng dành riêng cho nền tảng. Thông thường bao gồm tên, phiên bản hệ điều hành và kiến ​​trúc (do os.uname() cung cấp), mặc dù thông tin chính xác đi kèm tùy thuộc vào hệ điều hành; ví dụ: trên Linux, phiên bản kernel không đặc biệt quan trọng.

Ví dụ về các giá trị trả về:

Windows:

  • win-amd64 (Windows 64-bit trên AMD64, còn gọi là x86_64, Intel64 và EM64T)

  • win-arm64 (Windows 64-bit trên ARM64, hay còn gọi là AArch64)

  • win32 (tất cả những cái khác - cụ thể là sys.platform được trả về)

Hệ điều hành dựa trên POSIX:

  • linux-x86_64

  • macosx-15.5-arm64

  • macosx-26.0-universal2 (macOS trên Apple Silicon hoặc Intel)

  • android-24-arm64_v8a

Đối với các nền tảng không phải POSIX khác, hiện chỉ trả về sys.platform.

sysconfig.is_python_build()

Trả về True nếu trình thông dịch Python đang chạy được xây dựng từ nguồn và đang được chạy từ vị trí được xây dựng của nó chứ không phải từ một vị trí do ví dụ: chạy make install hoặc cài đặt qua trình cài đặt nhị phân.

sysconfig.parse_config_h(fp[, vars])

Phân tích tệp kiểu config.h-style.

fp là một đối tượng giống như tệp trỏ đến tệp giống config.h.

Một từ điển chứa các cặp tên/giá trị sẽ được trả về. Nếu một từ điển tùy chọn được chuyển vào làm đối số thứ hai, thì từ điển đó sẽ được sử dụng thay cho từ điển mới và được cập nhật với các giá trị được đọc trong tệp.

sysconfig.get_config_h_filename()

Trả về đường dẫn của pyconfig.h.

sysconfig.get_makefile_filename()

Trả về đường dẫn của Makefile.

Sử dụng dòng lệnh

Bạn có thể sử dụng sysconfig làm tập lệnh với tùy chọn -m của Python:

$ python -m cấu hình hệ thống
Nền tảng: "macosx-10.4-i386"
Phiên bản Python: "3.2"
Sơ đồ cài đặt hiện tại: "posix_prefix"

Đường dẫn:
        dữ liệu = "/usr/cục bộ"
        include = "/Users/tarek/Dev/svn.python.org/py3k/Include"
        platinclude = "."
        platlib = "/usr/local/lib/python3.2/site-packages"
        platstdlib = "/usr/local/lib/python3.2"
        purelib = "/usr/local/lib/python3.2/site-packages"
        scripts = "/usr/local/bin"
        stdlib = "/usr/local/lib/python3.2"

Biến:
        AC_APPLE_UNIVERSAL_BUILD = "0"
        AIX_GENUINE_CPLUSPLUS = "0"
        AR = "ar"
        ARFLAGS = "rc"
        ...

Cuộc gọi này sẽ in ở đầu ra tiêu chuẩn thông tin được trả về bởi get_platform(), get_python_version(), get_path()get_config_vars().