3. Định cấu hình Python

3.1. Yêu cầu xây dựng

Để xây dựng CPython, bạn sẽ cần:

Thay đổi trong phiên bản 3.5: Trên Windows, hiện cần có Visual Studio 2015 trở lên.

Thay đổi trong phiên bản 3.6: Các tính năng C99 đã chọn, như chức năng <stdint.h>static inline, hiện được yêu cầu.

Thay đổi trong phiên bản 3.7: Hỗ trợ chủ đề bây giờ là cần thiết.

Thay đổi trong phiên bản 3.11: Trình biên dịch C11, IEEE 754 và hỗ trợ NaN hiện được yêu cầu. Trên Windows, cần có Visual Studio 2017 trở lên.

Xem thêm PEP 7 "Hướng dẫn về phong cách cho mã C" và PEP 11 "hỗ trợ nền tảng CPython".

3.1.1. Yêu cầu đối với các mô-đun tùy chọn

Một số optional modules của thư viện tiêu chuẩn yêu cầu cài đặt thư viện của bên thứ ba để phát triển (ví dụ: phải có sẵn tệp tiêu đề).

Các yêu cầu còn thiếu được báo cáo trong đầu ra configure. Các mô-đun bị thiếu do thiếu phụ thuộc được liệt kê ở gần cuối đầu ra make, đôi khi sử dụng tên nội bộ, ví dụ: _ctypes cho mô-đun ctypes.

Nếu bạn phân phối trình thông dịch CPython mà không có mô-đun tùy chọn, cách tốt nhất là khuyên người dùng, những người thường mong đợi rằng các mô-đun thư viện tiêu chuẩn có sẵn.

Các phụ thuộc để xây dựng các mô-đun tùy chọn là:

phụ thuộc

Phiên bản tối thiểu

Mô-đun Python

libbz2

bz2

libffi

Khuyến nghị 3.3.0

ctypes

liblzma

lzma

libmpdec

2.5.0

decimal [1]

libreadline hoặc libedit [2]

readline

libuuid

_uuid [3]

ncurses [4]

curses

OpenSSL

3.0.18 được đề xuất
(tối thiểu 1.1.1)

ssl, hashlib [5]

SQLite

3.15.2

sqlite3

Tcl/Tk

8.5.12

tkinter, IDLE, turtle

zlib

1.2.2.1

zlib, gzip, ensurepip

zstd

1.4.5

compression.zstd

Lưu ý rằng bảng không bao gồm tất cả các mô-đun tùy chọn; đặc biệt, các mô-đun dành riêng cho nền tảng như winreg không được liệt kê ở đây.

Xem thêm

Thay đổi trong phiên bản 3.1: Hiện tại, phiên bản Tcl/Tk 8.3.1 được yêu cầu cho tkinter.

Thay đổi trong phiên bản 3.5: Tcl/Tk phiên bản 8.4 hiện được yêu cầu cho tkinter.

Thay đổi trong phiên bản 3.7: OpenSSL 1.0.2 hiện được yêu cầu cho hashlibssl.

Thay đổi trong phiên bản 3.10: OpenSSL 1.1.1 hiện được yêu cầu cho hashlibssl. SQLite 3.7.15 hiện được yêu cầu cho sqlite3.

Thay đổi trong phiên bản 3.11: Hiện tại, phiên bản Tcl/Tk 8.5.12 được yêu cầu cho tkinter.

Thay đổi trong phiên bản 3.13: SQLite 3.15.2 hiện được yêu cầu cho sqlite3.

3.2. Tệp đã tạo

Để giảm sự phụ thuộc của bản dựng, mã nguồn Python chứa nhiều tệp được tạo. Các lệnh để tạo lại tất cả các tệp được tạo:

làm regen-tất cả
tạo tên regen-stdlib-module
tạo regen-limit-abi
tạo cấu hình regen

Tệp Makefile.pre.in ghi lại các tệp đã tạo, đầu vào của chúng và các công cụ được sử dụng để tạo lại chúng. Tìm kiếm regen-* làm mục tiêu.

3.2.1. cấu hình tập lệnh

Lệnh make regen-configure tạo lại tệp aclocal.m4 và tập lệnh configure bằng cách sử dụng tập lệnh shell Tools/build/regen-configure.sh sử dụng bộ chứa Ubuntu để có các phiên bản công cụ tương tự và có đầu ra có thể lặp lại.

Vùng chứa là tùy chọn, lệnh sau có thể được chạy cục bộ

autoreconf -ivf -Werror

Các tệp được tạo có thể thay đổi tùy thuộc vào phiên bản chính xác của công cụ được sử dụng. Vùng chứa mà CPython sử dụng có Autoconf 2.72, aclocal từ Automake 1.16.5 và pkg-config 1.8.1.

Thay đổi trong phiên bản 3.13: Autoconf 2.71 và aclocal 1.16.5 và hiện được sử dụng để tạo lại configure.

Thay đổi trong phiên bản 3.14: Autoconf 2.72 hiện được sử dụng để tạo lại configure.

3.3. Tùy chọn cấu hình

Liệt kê tất cả các tùy chọn tập lệnh configure bằng cách sử dụng

./configure --help

Xem thêm Misc/SpecialBuilds.txt trong bản phân phối nguồn Python.

3.3.1. Tùy chọn chung

--enable-loadable-sqlite-extensions

Hỗ trợ các tiện ích mở rộng có thể tải trong mô-đun mở rộng _sqlite (mặc định là không) của mô-đun sqlite3.

Xem phương pháp sqlite3.Connection.enable_load_extension() của mô-đun sqlite3.

Added in version 3.6.

--disable-ipv6

Tắt hỗ trợ IPv6 (được bật theo mặc định nếu được hỗ trợ), xem mô-đun socket.

--enable-big-digits=[15|30]

Xác định kích thước theo bit của chữ số Python int: 15 hoặc 30 bit.

Theo mặc định, kích thước chữ số là 30.

Xác định PYLONG_BITS_IN_DIGIT thành 15 hoặc 30.

Xem sys.int_info.bits_per_digit.

--with-suffix=SUFFIX

Đặt hậu tố thực thi Python thành SUFFIX.

Hậu tố mặc định là .exe trên Windows và macOS (python.exe có thể thực thi), .js trên nút Emscripten, .html trên trình duyệt Emscripten, .wasm trên WASI và một chuỗi trống trên các nền tảng khác (có thể thực thi python).

Thay đổi trong phiên bản 3.11: Hậu tố mặc định trên nền tảng WASM là một trong các .js, .html hoặc .wasm.

--with-tzpath=<list of absolute paths separated by pathsep>

Chọn đường dẫn tìm kiếm múi giờ mặc định cho zoneinfo.TZPATH. Xem Compile-time configuration của mô-đun zoneinfo.

Mặc định: /usr/share/zoneinfo:/usr/lib/zoneinfo:/usr/share/lib/zoneinfo:/etc/zoneinfo.

Xem dấu phân cách đường dẫn os.pathsep.

Added in version 3.9.

--without-decimal-contextvar

Xây dựng mô-đun mở rộng _decimal bằng cách sử dụng ngữ cảnh luồng cục bộ thay vì ngữ cảnh cục bộ coroutine (mặc định), xem mô-đun decimal.

Xem decimal.HAVE_CONTEXTVAR và mô-đun contextvars.

Added in version 3.9.

--with-dbmliborder=<list of backend names>

Thứ tự ghi đè để kiểm tra phần phụ trợ db cho mô-đun dbm

Giá trị hợp lệ là chuỗi được phân tách bằng dấu hai chấm (:) với tên phụ trợ:

  • ndbm;

  • gdbm;

  • bdb.

--without-c-locale-coercion

Tắt tính năng ép buộc ngôn ngữ C thành ngôn ngữ dựa trên UTF-8 (được bật theo mặc định).

Không xác định macro PY_COERCE_C_LOCALE.

Xem PYTHONCOERCECLOCALEPEP 538.

--with-platlibdir=DIRNAME

Tên thư mục thư viện Python (mặc định là lib).

Fedora và SuSE sử dụng lib64 trên nền tảng 64-bit.

Xem sys.platlibdir.

Added in version 3.9.

--with-wheel-pkg-dir=PATH

Danh mục các gói bánh xe được mô-đun ensurepip sử dụng (không có theo mặc định).

Một số chính sách đóng gói phân phối Linux khuyến nghị không nên đóng gói phụ thuộc. Ví dụ: Fedora cài đặt các gói bánh xe trong thư mục /usr/share/python-wheels/ và không cài đặt gói ensurepip._bundled.

Added in version 3.10.

--with-pkg-config=[check|yes|no]

Liệu cấu hình có nên sử dụng pkg-config để phát hiện các phần phụ thuộc của bản dựng hay không.

  • check (mặc định): pkg-config là tùy chọn

  • yes: pkg-config là bắt buộc

  • no: cấu hình không sử dụng pkg-config ngay cả khi có mặt

Added in version 3.11.

--enable-pystats

Bật thu thập thống kê hiệu suất Python nội bộ.

Theo mặc định, tính năng thu thập số liệu thống kê bị tắt. Sử dụng lệnh python3 -X pystats hoặc đặt biến môi trường PYTHONSTATS=1 để bật thu thập số liệu thống kê khi khởi động Python.

Khi thoát Python, kết xuất số liệu thống kê nếu việc thu thập số liệu thống kê được bật và không bị xóa.

Hiệu ứng:

  • Thêm tùy chọn dòng lệnh -X pystats.

  • Thêm biến môi trường PYTHONSTATS.

  • Xác định macro Py_STATS.

  • Thêm chức năng vào mô-đun sys:

    • sys._stats_on(): Bật thu thập số liệu thống kê.

    • sys._stats_off(): Tắt thu thập số liệu thống kê.

    • sys._stats_clear(): Xóa số liệu thống kê.

    • sys._stats_dump(): Kết xuất số liệu thống kê vào tệp và xóa số liệu thống kê.

Số liệu thống kê sẽ được chuyển sang một tệp tùy ý (có thể là duy nhất) trong /tmp/py_stats/ (Unix) hoặc C:\temp\py_stats\ (Windows). Nếu thư mục đó không tồn tại thì kết quả sẽ được in ra stderr.

Sử dụng Tools/scripts/summarize_stats.py để đọc số liệu thống kê.

Thống kê:

  • Mã lệnh:

    • Chuyên môn: thành công, thất bại, trúng, trì hoãn, trượt, thất bại, thất bại;

    • Số lần thực hiện;

    • Số lượng cặp.

  • Gọi:

    • Các cuộc gọi Python nội tuyến;

    • cuộc gọi PyEval;

    • Khung đẩy;

    • Đối tượng khung được tạo;

    • Cuộc gọi đánh giá: vector, trình tạo, kế thừa, hàm VECTORCALL, lớp xây dựng, vị trí, hàm "ex", API, phương thức.

  • Đối tượng:

    • tăng và giảm;

    • thông dịch viên tăng và giảm;

    • phân bổ: tất cả, 512 byte, 4 kiB, lớn;

    • miễn phí;

    • đến/từ danh sách miễn phí;

    • từ điển được cụ thể hóa/phi vật chất hóa;

    • gõ bộ đệm;

    • nỗ lực tối ưu hóa;

    • dấu vết tối ưu hóa được tạo/thực thi;

    • rất tiếc đã được thực thi.

  • Người thu gom rác:

    • Thu gom rác;

    • Đối tượng đã đến thăm;

    • Đối tượng được thu thập.

Added in version 3.11.

--disable-gil

Cho phép hỗ trợ chạy Python mà không cần global interpreter lock (GIL): free-threaded build.

Xác định macro Py_GIL_DISABLED và thêm "t" vào sys.abiflags.

Xem CPython có luồng miễn phí để biết thêm chi tiết.

Added in version 3.13.

--enable-experimental-jit=[no|yes|yes-off|interpreter]

Chỉ ra cách tích hợp experimental just-in-time compiler.

  • no: Đừng xây dựng JIT.

  • yes: Kích hoạt JIT. Để tắt nó khi chạy, hãy đặt biến môi trường PYTHON_JIT=0.

  • yes-off: Tạo JIT nhưng tắt nó theo mặc định. Để kích hoạt nó trong thời gian chạy, hãy đặt biến môi trường PYTHON_JIT=1.

  • interpreter: Kích hoạt "trình thông dịch JIT" (chỉ hữu ích cho những người đang gỡ lỗi JIT). Để tắt nó khi chạy, hãy đặt biến môi trường PYTHON_JIT=0.

--enable-experimental-jit=no là hành vi mặc định nếu tùy chọn này không được cung cấp và --enable-experimental-jit là cách viết tắt của --enable-experimental-jit=yes. Xem Tools/jit/README.md để biết thêm thông tin, bao gồm cách cài đặt các phần phụ thuộc cần thiết trong thời gian xây dựng.

Ghi chú

Khi xây dựng CPython có bật JIT, hãy đảm bảo rằng hệ thống của bạn đã cài đặt Python 3.11 trở lên.

Added in version 3.13.

PKG_CONFIG

Đường dẫn đến tiện ích pkg-config.

PKG_CONFIG_LIBDIR
PKG_CONFIG_PATH

tùy chọn pkg-config.

3.3.2. Tùy chọn trình biên dịch C

CC

Lệnh biên dịch C.

CFLAGS

Cờ trình biên dịch C.

CPP

Lệnh tiền xử lý C.

CPPFLAGS

Cờ tiền xử lý C, ví dụ: -Iinclude_dir.

3.3.3. Tùy chọn trình liên kết

LDFLAGS

Cờ liên kết, ví dụ: -Llibrary_directory.

LIBS

Các thư viện để chuyển tới trình liên kết, ví dụ: -llibrary.

MACHDEP

Tên cho các tập tin thư viện phụ thuộc vào máy.

3.3.4. Tùy chọn cho phần phụ thuộc của bên thứ ba

Added in version 3.11.

BZIP2_CFLAGS
BZIP2_LIBS

Cờ trình biên dịch và trình liên kết C để liên kết Python với libbz2, được sử dụng bởi mô-đun bz2, ghi đè pkg-config.

CURSES_CFLAGS
CURSES_LIBS

Cờ trình biên dịch và trình liên kết C cho libncurses hoặc libncursesw, được mô-đun curses sử dụng, ghi đè pkg-config.

GDBM_CFLAGS
GDBM_LIBS

Cờ trình biên dịch và trình liên kết C cho gdbm.

LIBEDIT_CFLAGS
LIBEDIT_LIBS

Cờ trình biên dịch và trình liên kết C cho libedit, được sử dụng bởi mô-đun readline, ghi đè pkg-config.

LIBFFI_CFLAGS
LIBFFI_LIBS

Cờ trình biên dịch và trình liên kết C cho libffi, được sử dụng bởi mô-đun ctypes, ghi đè pkg-config.

LIBMPDEC_CFLAGS
LIBMPDEC_LIBS

Cờ trình biên dịch và trình liên kết C cho libmpdec, được sử dụng bởi mô-đun decimal, ghi đè pkg-config.

Ghi chú

Các biến môi trường này không có hiệu lực trừ khi --with-system-libmpdec được chỉ định.

LIBLZMA_CFLAGS
LIBLZMA_LIBS

Cờ trình biên dịch và trình liên kết C cho liblzma, được sử dụng bởi mô-đun lzma, ghi đè pkg-config.

LIBREADLINE_CFLAGS
LIBREADLINE_LIBS

Cờ trình biên dịch và trình liên kết C cho libreadline, được sử dụng bởi mô-đun readline, ghi đè pkg-config.

LIBSQLITE3_CFLAGS
LIBSQLITE3_LIBS

Cờ trình biên dịch và trình liên kết C cho libsqlite3, được sử dụng bởi mô-đun sqlite3, ghi đè pkg-config.

LIBUUID_CFLAGS
LIBUUID_LIBS

Cờ trình biên dịch và trình liên kết C cho libuuid, được sử dụng bởi mô-đun uuid, ghi đè pkg-config.

LIBZSTD_CFLAGS
LIBZSTD_LIBS

Cờ trình biên dịch và trình liên kết C cho libzstd, được sử dụng bởi mô-đun compression.zstd, ghi đè pkg-config.

Added in version 3.14.

PANEL_CFLAGS
PANEL_LIBS

Cờ trình biên dịch và liên kết C cho PANEL, ghi đè pkg-config.

Cờ trình biên dịch và trình liên kết C cho libpanel hoặc libpanelw, được mô-đun curses.panel sử dụng, ghi đè pkg-config.

TCLTK_CFLAGS
TCLTK_LIBS

Cờ trình biên dịch và liên kết C cho TCLTK, ghi đè pkg-config.

ZLIB_CFLAGS
ZLIB_LIBS

Cờ trình biên dịch và trình liên kết C cho libzlib, được sử dụng bởi mô-đun gzip, ghi đè pkg-config.

3.3.5. Tùy chọn WebAssugging

--enable-wasm-dynamic-linking

Bật hỗ trợ liên kết động cho WASM.

Liên kết động cho phép dlopen. Kích thước tệp thực thi tăng lên do hạn chế loại bỏ mã chết và các tính năng bổ sung.

Added in version 3.11.

--enable-wasm-pthreads

Bật hỗ trợ pthread cho WASM.

Added in version 3.11.

3.3.6. Tùy chọn cài đặt

--prefix=PREFIX

Cài đặt các tệp độc lập với kiến trúc trong PREFIX. Trên Unix, nó mặc định là /usr/local.

Giá trị này có thể được truy xuất trong thời gian chạy bằng sys.prefix.

Ví dụ: người ta có thể sử dụng --prefix="$HOME/.local/" để cài đặt Python trong thư mục chính của nó.

--exec-prefix=EPREFIX

Cài đặt các tệp phụ thuộc vào kiến trúc trong EPREFIX, mặc định là --prefix.

Giá trị này có thể được truy xuất trong thời gian chạy bằng sys.exec_prefix.

--disable-test-modules

Không xây dựng hay cài đặt các mô-đun thử nghiệm, như gói test hoặc mô-đun mở rộng _testcapi (được xây dựng và cài đặt theo mặc định).

Added in version 3.10.

--with-ensurepip=[upgrade|install|no]

Chọn lệnh ensurepip chạy trên cài đặt Python:

  • upgrade (mặc định): chạy lệnh python -m ensurepip --altinstall --upgrade.

  • install: chạy lệnh python -m ensurepip --altinstall;

  • no: không chạy Ensurepip;

Added in version 3.6.

3.3.7. Tùy chọn hiệu suất

Nên định cấu hình Python bằng --enable-optimizations --with-lto (PGO + LTO) để có hiệu suất tốt nhất. Cờ --enable-bolt thử nghiệm cũng có thể được sử dụng để cải thiện hiệu suất.

--enable-optimizations

Bật Tối ưu hóa hướng dẫn hồ sơ (PGO) bằng PROFILE_TASK (bị tắt theo mặc định).

Trình biên dịch C Clang yêu cầu chương trình llvm-profdata cho PGO. Trên macOS, GCC cũng yêu cầu: GCC chỉ là bí danh của Clang trên macOS.

Vô hiệu hóa cả sự xen kẽ ngữ nghĩa trong libpython nếu --enable-shared và GCC được sử dụng: thêm -fno-semantic-interposition vào cờ trình biên dịch và trình liên kết.

Ghi chú

Trong quá trình xây dựng, bạn có thể gặp phải cảnh báo của trình biên dịch về việc dữ liệu hồ sơ không có sẵn cho một số tệp nguồn. Những cảnh báo này vô hại vì chỉ một tập hợp con của mã được thực hiện trong quá trình thu thập dữ liệu hồ sơ. Để tắt những cảnh báo này trên Clang, hãy chặn chúng theo cách thủ công bằng cách thêm -Wno-profile-instr-unprofiled vào CFLAGS.

Added in version 3.6.

Thay đổi trong phiên bản 3.10: Sử dụng -fno-semantic-interposition trên GCC.

PROFILE_TASK

Biến môi trường được sử dụng trong Makefile: Đối số dòng lệnh Python cho tác vụ tạo PGO.

Mặc định: -m test --pgo --timeout=$(TESTTIMEOUT).

Added in version 3.8.

Thay đổi trong phiên bản 3.13: Thất bại trong nhiệm vụ không còn bị bỏ qua một cách âm thầm nữa.

--with-lto=[full|thin|no|yes]

Bật Tối ưu hóa thời gian liên kết (LTO) trong mọi bản dựng (bị tắt theo mặc định).

Trình biên dịch C Clang yêu cầu llvm-ar cho LTO (ar trên macOS), cũng như trình liên kết nhận biết LTO (ld.gold hoặc lld).

Added in version 3.6.

Added in version 3.11: Để sử dụng tính năng ThinLTO, hãy sử dụng --with-lto=thin trên Clang.

Thay đổi trong phiên bản 3.12: Sử dụng ThinLTO làm chính sách tối ưu hóa mặc định trên Clang nếu trình biên dịch chấp nhận cờ.

--enable-bolt

Cho phép sử dụng BOLT post-link binary optimizer (bị tắt theo mặc định).

BOLT là một phần của dự án LLVM nhưng không phải lúc nào cũng được đưa vào bản phân phối nhị phân của chúng. Cờ này yêu cầu llvm-boltmerge-fdata có sẵn.

BOLT vẫn là một dự án khá mới nên hiện tại lá cờ này nên được coi là thử nghiệm. Vì công cụ này hoạt động trên mã máy nên thành công của nó phụ thuộc vào sự kết hợp giữa môi trường xây dựng + cấu hình tối ưu hóa khác + kiến ​​trúc CPU và không phải tất cả các kết hợp đều được hỗ trợ. Các phiên bản BOLT trước LLVM 16 được biết là đã gây ra sự cố cho BOLT trong một số trường hợp. Chúng tôi đặc biệt khuyến khích sử dụng LLVM 16 hoặc mới hơn để tối ưu hóa BOLT.

Các biến BOLT_INSTRUMENT_FLAGSBOLT_APPLY_FLAGS configure có thể được xác định để ghi đè bộ đối số mặc định cho llvm-bolt cho công cụ và áp dụng dữ liệu BOLT cho các tệp nhị phân tương ứng.

Added in version 3.12.

BOLT_APPLY_FLAGS

Đối số cho llvm-bolt khi tạo BOLT optimized binary.

Added in version 3.12.

BOLT_INSTRUMENT_FLAGS

Đối số cho llvm-bolt khi thiết lập các tệp nhị phân.

Added in version 3.12.

--with-computed-gotos

Bật gotos được tính toán trong vòng đánh giá (được bật theo mặc định trên các trình biên dịch được hỗ trợ).

--with-tail-call-interp

Bật trình thông dịch bằng cách sử dụng lệnh gọi đuôi trong CPython. Nếu được bật, bạn nên bật PGO (--enable-optimizations). Tùy chọn này đặc biệt yêu cầu trình biên dịch C có hỗ trợ lệnh gọi tail thích hợp và quy ước gọi preserve_none. Ví dụ: Clang 19 và mới hơn hỗ trợ tính năng này.

Added in version 3.14.

--without-mimalloc

Tắt bộ cấp phát mimalloc nhanh (được bật theo mặc định).

Không thể sử dụng tùy chọn này cùng với --disable-gil vì bản dựng free-threaded yêu cầu mimalloc.

Xem thêm biến môi trường PYTHONMALLOC.

--without-pymalloc

Vô hiệu hóa bộ cấp phát bộ nhớ Python chuyên dụng pymalloc (được bật theo mặc định).

Xem thêm biến môi trường PYTHONMALLOC.

--without-doc-strings

Tắt các chuỗi tài liệu tĩnh để giảm dung lượng bộ nhớ (được bật theo mặc định). Chuỗi tài liệu được xác định bằng Python không bị ảnh hưởng.

Không xác định macro WITH_DOC_STRINGS.

Xem macro PyDoc_STRVAR().

--enable-profiling

Bật cấu hình mã cấp C bằng gprof (bị tắt theo mặc định).

--with-strict-overflow

Thêm -fstrict-overflow vào cờ của trình biên dịch C (theo mặc định, chúng tôi thêm -fno-strict-overflow thay thế).

--without-remote-debug

Tắt hỗ trợ gỡ lỗi từ xa được mô tả trong PEP 768 (được bật theo mặc định). Khi cờ này được cung cấp, mã cho phép trình thông dịch lên lịch thực thi tệp Python trong một quy trình riêng biệt như được mô tả trong PEP 768 sẽ không được biên dịch. Điều này bao gồm cả chức năng lên lịch thực thi mã và chức năng nhận mã sẽ được thực thi.

Py_REMOTE_DEBUG

Macro này được xác định theo mặc định, trừ khi Python được định cấu hình bằng --without-remote-debug.

Lưu ý rằng ngay cả khi macro được xác định, tính năng gỡ lỗi từ xa có thể không khả dụng (ví dụ: trên nền tảng không tương thích).

Added in version 3.14.

3.3.8. Bản dựng gỡ lỗi Python

Bản dựng gỡ lỗi là Python được xây dựng với tùy chọn cấu hình --with-pydebug.

Tác dụng của bản dựng gỡ lỗi:

  • Hiển thị tất cả các cảnh báo theo mặc định: danh sách các bộ lọc cảnh báo mặc định trống trong mô-đun warnings.

  • Thêm d vào sys.abiflags.

  • Thêm chức năng sys.gettotalrefcount().

  • Thêm tùy chọn dòng lệnh -X showrefcount.

  • Thêm tùy chọn dòng lệnh -d và biến môi trường PYTHONDEBUG để gỡ lỗi trình phân tích cú pháp.

  • Thêm hỗ trợ cho biến __lltrace__: bật theo dõi mức độ thấp trong vòng đánh giá mã byte nếu biến được xác định.

  • Cài đặt debug hooks on memory allocators để phát hiện lỗi tràn bộ đệm và các lỗi bộ nhớ khác.

  • Xác định macro Py_DEBUGPy_REF_DEBUG.

  • Thêm kiểm tra thời gian chạy: mã được bao quanh bởi #ifdef Py_DEBUG#endif. Bật xác nhận assert(...)_PyObject_ASSERT(...): không đặt macro NDEBUG (xem thêm tùy chọn cấu hình --with-assertions). Kiểm tra thời gian chạy chính:

    • Thêm kiểm tra độ tỉnh táo trên các đối số của hàm.

    • Các đối tượng Unicode và int được tạo với bộ nhớ chứa đầy mẫu để phát hiện việc sử dụng các đối tượng chưa được khởi tạo.

    • Đảm bảo rằng các hàm có thể xóa hoặc thay thế ngoại lệ hiện tại không được gọi khi có ngoại lệ được nêu ra.

    • Kiểm tra xem các chức năng giải phóng không thay đổi ngoại lệ hiện tại.

    • Trình thu gom rác (chức năng gc.collect()) chạy một số kiểm tra cơ bản về tính nhất quán của đối tượng.

    • Macro Py_SAFE_DOWNCAST() kiểm tra tình trạng tràn và tràn số nguyên khi truyền xuống từ loại rộng sang loại hẹp.

Xem thêm tùy chọn cấu hình Python Development Mode--with-trace-refs.

Thay đổi trong phiên bản 3.8: Các bản phát hành hiện tương thích với ABI với các bản dựng gỡ lỗi: việc xác định macro Py_DEBUG không còn ngụ ý macro Py_TRACE_REFS nữa (xem tùy chọn --with-trace-refs). Tuy nhiên, bản dựng gỡ lỗi vẫn hiển thị nhiều ký hiệu hơn bản dựng bản phát hành và mã được tạo dựa trên bản dựng gỡ lỗi không nhất thiết phải tương thích với bản dựng phát hành.

3.3.9. Tùy chọn gỡ lỗi

--with-pydebug

Build Python in debug mode: xác định macro Py_DEBUG (bị tắt theo mặc định).

--with-trace-refs

Bật tham chiếu theo dõi cho mục đích gỡ lỗi (bị tắt theo mặc định).

Hiệu ứng:

Biến môi trường PYTHONDUMPREFS có thể được sử dụng để kết xuất các đối tượng và số lượng tham chiếu vẫn còn tồn tại khi thoát Python.

Statically allocated objects không được theo dõi.

Added in version 3.8.

Thay đổi trong phiên bản 3.13: Bản dựng này hiện tương thích với ABI với bản phát hành và debug build.

--with-assertions

Xây dựng với xác nhận C được bật (mặc định là không): assert(...);_PyObject_ASSERT(...);.

Nếu được đặt, macro NDEBUG không được xác định trong biến trình biên dịch OPT.

Xem thêm tùy chọn --with-pydebug (debug build) cũng cho phép xác nhận.

Added in version 3.6.

--with-valgrind

Kích hoạt hỗ trợ Valgrind (mặc định là không).

--with-dtrace

Bật hỗ trợ DTrace (mặc định là không).

Xem Instrumenting CPython with DTrace and SystemTap.

Added in version 3.6.

--with-address-sanitizer

Bật trình phát hiện lỗi bộ nhớ addressSanitizer, asan (mặc định là không). Để cải thiện khả năng phát hiện ASan, bạn cũng có thể muốn kết hợp điều này với --without-pymalloc để vô hiệu hóa bộ cấp phát đối tượng nhỏ chuyên dụng mà việc phân bổ của nó không được ASan theo dõi.

Added in version 3.6.

--with-memory-sanitizer

Bật trình phát hiện lỗi phân bổ MemorySanitizer, msan (mặc định là không).

Added in version 3.6.

--with-undefined-behavior-sanitizer

Bật trình phát hiện hành vi không xác định UndebehaviorSanitizer, ubsan (mặc định là không).

Added in version 3.6.

--with-thread-sanitizer

Bật trình phát hiện cuộc đua dữ liệu ThreadSanitizer, tsan (mặc định là không).

Added in version 3.13.

3.3.10. Tùy chọn trình liên kết

--enable-shared

Cho phép xây dựng thư viện Python dùng chung: libpython (mặc định là không).

--without-static-libpython

Không xây dựng libpythonMAJOR.MINOR.a và không cài đặt python.o (được xây dựng và bật theo mặc định).

Added in version 3.10.

3.3.11. Tùy chọn thư viện

--with-libs='lib1 ...'

Liên kết với các thư viện bổ sung (mặc định là không).

--with-system-expat

Xây dựng mô-đun pyexpat bằng thư viện expat đã cài đặt (mặc định là không).

--with-system-libmpdec

Xây dựng mô-đun mở rộng _decimal bằng thư viện mpdecimal đã cài đặt, xem mô-đun decimal (mặc định là có).

Added in version 3.3.

Thay đổi trong phiên bản 3.13: Mặc định sử dụng thư viện mpdecimal đã cài đặt.

Thay đổi trong phiên bản 3.15: Một bản sao đi kèm của thư viện sẽ không còn được chọn ngầm nếu không tìm thấy thư viện mpdecimal đã cài đặt. Chỉ trong Python 3.15, nó vẫn có thể được chọn rõ ràng bằng --with-system-libmpdec=no hoặc --without-system-libmpdec.

Không được dùng nữa kể từ phiên bản 3.13, sẽ bị xóa trong phiên bản 3.16: Bản sao của nguồn thư viện mpdecimal sẽ không còn được phân phối với Python 3.16 nữa.

--with-readline=readline|editline

Chỉ định thư viện phụ trợ cho mô-đun readline.

  • readline: Sử dụng readline làm phụ trợ.

  • dòng chỉnh sửa: Sử dụng dòng chỉnh sửa làm phụ trợ.

Added in version 3.10.

--without-readline

Không xây dựng mô-đun readline (được xây dựng theo mặc định).

Không xác định macro HAVE_LIBREADLINE.

Added in version 3.10.

--with-libm=STRING

Ghi đè thư viện toán học libm thành STRING (mặc định phụ thuộc vào hệ thống).

--with-libc=STRING

Ghi đè thư viện libc C thành STRING (mặc định phụ thuộc vào hệ thống).

--with-openssl=DIR

Gốc của thư mục OpenSSL.

Added in version 3.7.

--with-openssl-rpath=[no|auto|DIR]

Đặt thư mục thư viện thời gian chạy (rpath) cho thư viện OpenSSL:

  • no (mặc định): không đặt đường dẫn;

  • auto: tự động phát hiện đường dẫn từ --with-opensslpkg-config;

  • DIR: đặt đường dẫn rõ ràng.

Added in version 3.10.

3.3.12. Tùy chọn bảo mật

--with-hash-algorithm=[fnv|siphash13|siphash24]

Chọn thuật toán băm để sử dụng trong Python/pyhash.c:

  • siphash13 (mặc định);

  • siphash24;

  • fnv.

Added in version 3.4.

Added in version 3.11: siphash13 được thêm vào và nó là mặc định mới.

--with-builtin-hashlib-hashes=md5,sha1,sha256,sha512,sha3,blake2

Các mô-đun băm tích hợp:

  • md5;

  • sha1;

  • sha256;

  • sha512;

  • sha3 (có rung);

  • blake2.

Added in version 3.9.

--with-ssl-default-suites=[python|openssl|STRING]

Ghi đè chuỗi bộ mật mã mặc định OpenSSL:

  • python (mặc định): sử dụng lựa chọn ưa thích của Python;

  • openssl: giữ nguyên các giá trị mặc định của OpenSSL;

  • STRING: sử dụng chuỗi tùy chỉnh

Xem mô-đun ssl.

Added in version 3.7.

Thay đổi trong phiên bản 3.10: Cài đặt pythonSTRING cũng đặt TLS 1.2 làm phiên bản giao thức tối thiểu.

--disable-safety

Tắt các tùy chọn trình biên dịch recommended by OpenSSF vì lý do bảo mật mà không ảnh hưởng đến hiệu năng. Nếu tùy chọn này không được bật, CPython sẽ được xây dựng dựa trên các tùy chọn trình biên dịch an toàn mà không bị chậm lại. Khi tùy chọn này được bật, CPython sẽ không được xây dựng với các tùy chọn trình biên dịch được liệt kê bên dưới.

Các tùy chọn trình biên dịch sau bị tắt với --disable-safety:

  • -fstack-protector-strong: Bật kiểm tra thời gian chạy để phát hiện lỗi tràn bộ đệm dựa trên ngăn xếp.

  • -Wtrampolines: Bật cảnh báo về các tấm bạt lò xo yêu cầu ngăn xếp có thể thực thi được.

Added in version 3.14.

--enable-slower-safety

Bật các tùy chọn trình biên dịch recommended by OpenSSF vì lý do bảo mật đòi hỏi chi phí cao. Nếu tùy chọn này không được bật, CPython sẽ không được xây dựng dựa trên các tùy chọn trình biên dịch an toàn ảnh hưởng đến hiệu suất. Khi tùy chọn này được bật, CPython sẽ được xây dựng với các tùy chọn trình biên dịch được liệt kê bên dưới.

Các tùy chọn trình biên dịch sau được bật với --enable-slower-safety:

  • -D_FORTIFY_SOURCE=3: Củng cố các nguồn bằng các kiểm tra biên dịch và thời gian chạy để phát hiện việc sử dụng libc không an toàn và tràn bộ đệm.

Added in version 3.14.

3.3.13. Tùy chọn macOS

Xem Mac/README.rst.

--enable-universalsdk
--enable-universalsdk=SDKDIR

Tạo một bản dựng nhị phân phổ quát. SDKDIR chỉ định macOS SDK nào sẽ được sử dụng để thực hiện quá trình xây dựng (mặc định là không).

--enable-framework
--enable-framework=INSTALLDIR

Tạo Python.framework thay vì cài đặt Unix truyền thống. Tùy chọn INSTALLDIR chỉ định đường dẫn cài đặt (mặc định là không).

--with-universal-archs=ARCH

Chỉ định loại nhị phân phổ quát sẽ được tạo. Tùy chọn này chỉ hợp lệ khi --enable-universalsdk được đặt.

Tùy chọn:

  • universal2 (x86-64 và arm64);

  • 32-bit (PPC và i386);

  • 64-bit (PPC64 và x86-64);

  • 3-way (i386, PPC và x86-64);

  • intel (i386 và x86-64);

  • intel-32 (i386);

  • intel-64 (x86-64);

  • all (PPC, i386, PPC64 và x86-64).

Lưu ý rằng các giá trị cho mục cấu hình này là not giống với giá trị nhận dạng được sử dụng cho bánh xe nhị phân phổ quát trên macOS. Xem Hướng dẫn sử dụng bao bì Python để biết chi tiết về packaging platform compatibility tags used on macOS

--with-framework-name=FRAMEWORK

Chỉ định tên cho khung python trên macOS chỉ hợp lệ khi đặt --enable-framework (mặc định: Python).

--with-app-store-compliance
--with-app-store-compliance=PATCH-FILE

Thư viện chuẩn Python chứa các chuỗi được biết là có thể gây ra lỗi công cụ kiểm tra tự động khi được các Cửa hàng ứng dụng macOS và iOS gửi để phân phối. Nếu được bật, tùy chọn này sẽ áp dụng danh sách các bản vá được xác định là có tác dụng điều chỉnh việc tuân thủ cửa hàng ứng dụng. Một tập tin vá tùy chỉnh cũng có thể được chỉ định. Tùy chọn này bị tắt theo mặc định.

Added in version 3.13.

3.3.14. Tùy chọn iOS

Xem iOS/README.rst.

--enable-framework=INSTALLDIR

Tạo Python.framework. Không giống như macOS, đối số INSTALLDIR chỉ định đường dẫn cài đặt là bắt buộc.

--with-framework-name=FRAMEWORK

Chỉ định tên cho khung (mặc định: Python).

3.3.15. Tùy chọn biên dịch chéo

Biên dịch chéo, còn được gọi là xây dựng chéo, có thể được sử dụng để xây dựng Python cho kiến trúc hoặc nền tảng CPU khác. Biên dịch chéo yêu cầu trình thông dịch Python cho nền tảng xây dựng. Phiên bản của Python xây dựng phải khớp với phiên bản của Python được biên dịch chéo trên máy chủ.

--build=BUILD

định cấu hình để xây dựng trên BUILD, thường được đoán bởi config.guess.

--host=HOST

biên dịch chéo để xây dựng các chương trình chạy trên HOST (nền tảng đích)

--with-build-python=path/to/python

đường dẫn để xây dựng nhị phân python để biên dịch chéo

Added in version 3.11.

CONFIG_SITE=file

Một biến môi trường trỏ đến một tệp có phần ghi đè cấu hình.

Ví dụ về tệp config.site:

# config.site-aarch64
ac_cv_buggy_getaddrinfo=không
ac_cv_file__dev_ptmx=
ac_cv_file__dev_ptc=không
HOSTRUNNER

Chương trình chạy CPython cho nền tảng máy chủ để biên dịch chéo.

Added in version 3.11.

Ví dụ biên dịch chéo:

CONFIG_SITE=config.site-aarch64 ../configure \
    --build=x86_64-pc-linux-gnu \
    --host=aarch64-unknown-linux-gnu \
    --with-build-python=../x86_64/python

3.4. Hệ thống xây dựng Python

3.4.1. Các tập tin chính của hệ thống xây dựng

  • configure.ac => configure;

  • Makefile.pre.in => Makefile (được tạo bởi configure);

  • pyconfig.h (được tạo bởi configure);

  • Modules/Setup: Các tiện ích mở rộng C được Makefile xây dựng bằng cách sử dụng tập lệnh shell Module/makesetup;

3.4.2. Các bước xây dựng chính

  • Các tệp C (.c) được xây dựng dưới dạng tệp đối tượng (.o).

  • Thư viện libpython tĩnh (.a) được tạo từ các tệp đối tượng.

  • python.o và thư viện libpython tĩnh được liên kết với chương trình python cuối cùng.

  • Tiện ích mở rộng C được Makefile xây dựng (xem Modules/Setup).

3.4.3. Mục tiêu Makefile chính

3.4.3.1. làm

Trong hầu hết các trường hợp, khi xây dựng lại sau khi chỉnh sửa một số mã hoặc làm mới giao dịch thanh toán của bạn từ thượng nguồn, tất cả những gì bạn cần làm là thực thi make, (theo ngữ nghĩa của Make) xây dựng mục tiêu mặc định, mục tiêu đầu tiên được xác định trong Makefile. Theo truyền thống (bao gồm cả dự án CPython), đây thường là mục tiêu all. Tập lệnh configure mở rộng biến autoconf, @DEF_MAKE_ALL_RULE@ để mô tả chính xác mục tiêu nào make all sẽ xây dựng. Ba lựa chọn là:

  • profile-opt (được định cấu hình bằng --enable-optimizations)

  • build_wasm (được chọn nếu nền tảng máy chủ khớp với wasm32-wasi* hoặc wasm32-emscripten)

  • build_all (được định cấu hình mà không sử dụng rõ ràng một trong hai cái khác)

Tùy thuộc vào những thay đổi gần đây nhất của tệp nguồn, Make sẽ xây dựng lại mọi mục tiêu (tệp đối tượng và tệp thực thi) được coi là lỗi thời, bao gồm cả việc chạy lại configure nếu cần. Tuy nhiên, phần phụ thuộc nguồn/đích rất nhiều và được duy trì theo cách thủ công, do đó, Make đôi khi không có tất cả thông tin cần thiết để phát hiện chính xác tất cả các mục tiêu cần được xây dựng lại. Tùy thuộc vào mục tiêu nào không được xây dựng lại, bạn có thể gặp một số vấn đề. Nếu bạn gặp vấn đề về xây dựng hoặc kiểm tra mà không thể giải thích bằng cách khác, make clean && make sẽ giải quyết hầu hết các vấn đề phụ thuộc, tuy nhiên thời gian xây dựng sẽ lâu hơn.

3.4.3.2. làm nền tảng

Xây dựng chương trình python nhưng không xây dựng các mô-đun mở rộng thư viện tiêu chuẩn. Điều này tạo ra một tệp có tên platform chứa một dòng mô tả chi tiết về nền tảng xây dựng, ví dụ: macosx-14.3-arm64-3.12 hoặc linux-x86_64-3.13.

3.4.3.3. chọn hồ sơ

Xây dựng Python bằng cách sử dụng tính năng tối ưu hóa theo hướng dẫn hồ sơ (PGO). Bạn có thể sử dụng tùy chọn configure --enable-optimizations để đặt mục tiêu này làm mục tiêu mặc định của lệnh make (make all hoặc chỉ make).

3.4.3.4. làm sạch

Xóa các tập tin được xây dựng.

3.4.3.5. làm sạch

Ngoài công việc do make clean thực hiện, hãy xóa các tệp được tạo bởi tập lệnh cấu hình. configure sẽ phải được chạy trước khi xây dựng lại. [6]

3.4.3.6. thực hiện cài đặt

Xây dựng mục tiêu all và cài đặt Python.

3.4.3.7. làm bài kiểm tra

Xây dựng mục tiêu all và chạy bộ thử nghiệm Python với tùy chọn --fast-ci mà không cần kiểm tra GUI. Biến:

  • TESTOPTS: tùy chọn dòng lệnh regrtest bổ sung.

  • TESTPYTHONOPTS: tùy chọn dòng lệnh Python bổ sung.

  • TESTTIMEOUT: thời gian chờ tính bằng giây (mặc định: 10 phút).

3.4.3.8. làm ci

Điều này tương tự như make test, nhưng sử dụng -ugui để chạy thử nghiệm GUI.

Added in version 3.14.

3.4.3.9. tạo buildbottest

Điều này tương tự như make test, nhưng sử dụng tùy chọn --slow-ci và thời gian chờ mặc định là 20 phút, thay vì tùy chọn --fast-ci.

3.4.3.10. làm regen-tất cả

Tái tạo (gần như) tất cả các tệp được tạo. Chúng bao gồm (nhưng không giới hạn) các trường hợp mã byte và tệp trình tạo trình phân tích cú pháp. make regen-stdlib-module-namesautoconf phải được chạy riêng cho generated files còn lại.

3.4.4. Phần mở rộng C

Một số tiện ích mở rộng C được xây dựng dưới dạng mô-đun tích hợp, như mô-đun sys. Chúng được xây dựng bằng macro Py_BUILD_CORE_BUILTIN được xác định. Các mô-đun tích hợp không có thuộc tính __file__:

>>> nhập hệ thống
>>> hệ thống
<mô-đun 'sys' (tích hợp sẵn)>
>>> sys.__file__
Traceback (cuộc gọi gần đây nhất):
  Tệp "<stdin>", dòng 1, trong <module>
AttributionError: mô-đun 'sys' không có thuộc tính '__file__'

Các tiện ích mở rộng C khác được xây dựng dưới dạng thư viện động, như mô-đun _asyncio. Chúng được xây dựng bằng macro Py_BUILD_CORE_MODULE được xác định. Ví dụ trên Linux x86-64:

>>> nhập _asyncio
>>> _asyncio
<mô-đun '_asyncio' từ '/usr/lib64/python3.9/lib-dynload/_asyncio.cpython-39-x86_64-linux-gnu.so'>
>>> _asyncio.__file__
'/usr/lib64/python3.9/lib-dynload/_asyncio.cpython-39-x86_64-linux-gnu.so'

Modules/Setup được sử dụng để tạo các mục tiêu Makefile để xây dựng các tiện ích mở rộng C. Ở phần đầu của tệp, phần mở rộng C được xây dựng dưới dạng mô-đun tích hợp. Các tiện ích mở rộng được xác định sau điểm đánh dấu *shared* được xây dựng dưới dạng thư viện động.

Các macro PyAPI_FUNC(), PyAPI_DATA()PyMODINIT_FUNC của Include/exports.h được xác định khác nhau tùy thuộc vào việc macro Py_BUILD_CORE_MODULE có được xác định hay không:

  • Sử dụng Py_EXPORTED_SYMBOL nếu Py_BUILD_CORE_MODULE được xác định

  • Sử dụng Py_IMPORTED_SYMBOL nếu không.

Nếu macro Py_BUILD_CORE_BUILTIN được sử dụng do nhầm lẫn trên tiện ích mở rộng C được xây dựng dưới dạng thư viện dùng chung thì chức năng PyInit_xxx() của nó không được xuất, gây ra ImportError khi nhập.

3.5. Cờ trình biên dịch và liên kết

Các tùy chọn được đặt bởi tập lệnh ./configure và các biến môi trường và được Makefile sử dụng.

3.5.1. Cờ tiền xử lý

CONFIGURE_CPPFLAGS

Giá trị của biến CPPFLAGS được truyền cho tập lệnh ./configure.

Added in version 3.6.

CPPFLAGS

(Mục tiêu) Cờ tiền xử lý C/C++, ví dụ: -Iinclude_dir nếu bạn có tiêu đề trong thư mục không chuẩn include_dir.

Cả CPPFLAGSLDFLAGS đều cần chứa giá trị của shell để có thể xây dựng các mô-đun mở rộng bằng cách sử dụng các thư mục được chỉ định trong các biến môi trường.

BASECPPFLAGS

Added in version 3.4.

PY_CPPFLAGS

Các cờ tiền xử lý bổ sung được thêm vào để xây dựng các tệp đối tượng trình thông dịch.

Mặc định: $(BASECPPFLAGS) -I. -I$(srcdir)/Include $(CONFIGURE_CPPFLAGS) $(CPPFLAGS).

Added in version 3.2.

3.5.2. Cờ trình biên dịch

CC

Lệnh biên dịch C.

Ví dụ: gcc -pthread.

CXX

Lệnh biên dịch C++.

Ví dụ: g++ -pthread.

CFLAGS

Cờ trình biên dịch C.

CFLAGS_NODIST

CFLAGS_NODIST được sử dụng để xây dựng trình thông dịch và phần mở rộng stdlib C. Sử dụng nó khi cờ trình biên dịch phải là not là một phần của CFLAGS sau khi Python được cài đặt (gh-65320).

Đặc biệt, CFLAGS không được chứa:

  • cờ trình biên dịch -I (để đặt đường dẫn tìm kiếm cho các tệp bao gồm). Cờ -I được xử lý từ trái sang phải và mọi cờ trong CFLAGS sẽ được ưu tiên hơn các cờ -I do người dùng và gói cung cấp.

  • các cờ cứng như -Werror vì các bản phân phối không thể kiểm soát liệu các gói do người dùng cài đặt có tuân thủ các tiêu chuẩn nâng cao như vậy hay không.

Added in version 3.5.

COMPILEALL_OPTS

Các tùy chọn được chuyển đến dòng lệnh compileall khi xây dựng tệp PYC trong make install. Mặc định: -j0.

Added in version 3.12.

EXTRA_CFLAGS

Cờ trình biên dịch bổ sung C.

CONFIGURE_CFLAGS

Giá trị của biến CFLAGS được truyền cho tập lệnh ./configure.

Added in version 3.2.

CONFIGURE_CFLAGS_NODIST

Giá trị của biến CFLAGS_NODIST được truyền cho tập lệnh ./configure.

Added in version 3.5.

BASECFLAGS

Cờ biên dịch cơ sở.

OPT

Cờ tối ưu hóa

CFLAGS_ALIASING

Cờ bí danh nghiêm ngặt hoặc không nghiêm ngặt được sử dụng để biên dịch Python/dtoa.c.

Added in version 3.7.

CFLAGS_CEVAL

Cờ được sử dụng để biên dịch Python/ceval.c.

Added in version 3.14.5.

CCSHARED

Cờ trình biên dịch được sử dụng để xây dựng thư viện dùng chung.

Ví dụ: -fPIC được sử dụng trên Linux và BSD.

CFLAGSFORSHARED

Đã thêm cờ C bổ sung để xây dựng tệp đối tượng trình thông dịch.

Mặc định: $(CCSHARED) khi --enable-shared được sử dụng hoặc nếu không thì là một chuỗi trống.

PY_CFLAGS

Mặc định: $(BASECFLAGS) $(OPT) $(CONFIGURE_CFLAGS) $(CFLAGS) $(EXTRA_CFLAGS).

PY_CFLAGS_NODIST

Mặc định: $(CONFIGURE_CFLAGS_NODIST) $(CFLAGS_NODIST) -I$(srcdir)/Include/internal.

Added in version 3.5.

PY_STDMODULE_CFLAGS

Cờ C được sử dụng để xây dựng các tệp đối tượng trình thông dịch.

Mặc định: $(PY_CFLAGS) $(PY_CFLAGS_NODIST) $(PY_CPPFLAGS) $(CFLAGSFORSHARED).

Added in version 3.7.

PY_CORE_CFLAGS

Mặc định: $(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE.

Added in version 3.2.

PY_BUILTIN_MODULE_CFLAGS

Cờ trình biên dịch để xây dựng mô-đun mở rộng thư viện tiêu chuẩn dưới dạng mô-đun tích hợp, như mô-đun posix.

Mặc định: $(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE_BUILTIN.

Added in version 3.8.

PURIFY

Lệnh thanh lọc. Purify là một chương trình gỡ lỗi bộ nhớ.

Mặc định: chuỗi trống (không được sử dụng).

3.5.3. Cờ liên kết

LINKCC

Lệnh trình liên kết được sử dụng để xây dựng các chương trình như python_testembed.

Mặc định: $(PURIFY) $(CC).

CONFIGURE_LDFLAGS

Giá trị của biến LDFLAGS được truyền cho tập lệnh ./configure.

Tránh gán CFLAGS, LDFLAGS, v.v. để người dùng có thể sử dụng chúng trên dòng lệnh để nối vào các giá trị này mà không cần chạm vào các giá trị đặt trước.

Added in version 3.2.

LDFLAGS_NODIST

LDFLAGS_NODIST được sử dụng theo cách tương tự như CFLAGS_NODIST. Sử dụng nó khi cờ liên kết nên not là một phần của LDFLAGS sau khi Python được cài đặt (gh-65320).

Đặc biệt, LDFLAGS không được chứa:

  • cờ trình biên dịch -L (để đặt đường dẫn tìm kiếm cho thư viện). Cờ -L được xử lý từ trái sang phải và mọi cờ trong LDFLAGS sẽ được ưu tiên hơn các cờ -L do người dùng và gói cung cấp.

CONFIGURE_LDFLAGS_NODIST

Giá trị của biến LDFLAGS_NODIST được truyền cho tập lệnh ./configure.

Added in version 3.8.

LDFLAGS

Cờ liên kết, ví dụ: -Llib_dir nếu bạn có thư viện trong thư mục không chuẩn lib_dir.

Cả CPPFLAGSLDFLAGS đều cần chứa giá trị của shell để có thể xây dựng các mô-đun mở rộng bằng cách sử dụng các thư mục được chỉ định trong các biến môi trường.

LIBS

Cờ trình liên kết để chuyển các thư viện tới trình liên kết khi liên kết tệp thực thi Python.

Ví dụ: -lrt.

LDSHARED

Lệnh xây dựng thư viện dùng chung.

Mặc định: @LDSHARED@ $(PY_LDFLAGS).

BLDSHARED

Lệnh xây dựng thư viện chia sẻ libpython.

Mặc định: @BLDSHARED@ $(PY_CORE_LDFLAGS).

PY_LDFLAGS

Mặc định: $(CONFIGURE_LDFLAGS) $(LDFLAGS).

PY_LDFLAGS_NODIST

Mặc định: $(CONFIGURE_LDFLAGS_NODIST) $(LDFLAGS_NODIST).

Added in version 3.8.

PY_CORE_LDFLAGS

Cờ liên kết được sử dụng để xây dựng các tệp đối tượng trình thông dịch.

Added in version 3.8.

Chú thích cuối trang