3. Python ਦੀ ਸੰਰਚਨਾ

3.1. ਬਿਲਡ ਲਈ ਲੋੜਾਂ

CPython ਨੂੰ ਬਿਲਡ ਕਰਨ ਲਈ ਤੁਹਾਨੂੰ ਹੇਠ ਲਿਖੀਆਂ ਚੀਜ਼ਾਂ ਦੀ ਲੋੜ ਹੋਵੇਗੀ:

Changed in version 3.5: Windows ਉੱਤੇ ਹੁਣ Visual Studio 2015 ਜਾਂ ਇਸ ਤੋਂ ਬਾਅਦ ਵਾਲਾ ਸੰਸਕਰਣ ਲਾਜ਼ਮੀ ਹੈ।

Changed in version 3.6: ਚੁਣੀਆਂ ਹੋਈਆਂ C99 ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ, ਜਿਵੇਂ <stdint.h> ਅਤੇ static inline functions, ਹੁਣ ਲਾਜ਼ਮੀ ਹਨ।

Changed in version 3.7: Thread ਸਮਰਥਨ ਹੁਣ ਲਾਜ਼ਮੀ ਹੈ।

Changed in version 3.11: ਹੁਣ C11 compiler, IEEE 754 ਅਤੇ NaN ਲਈ ਸਮਰਥਨ ਲਾਜ਼ਮੀ ਹੈ। Windows ਉੱਤੇ Visual Studio 2017 ਜਾਂ ਇਸ ਤੋਂ ਬਾਅਦ ਵਾਲਾ ਸੰਸਕਰਣ ਲਾਜ਼ਮੀ ਹੈ।

ਇਸ ਤੋਂ ਇਲਾਵਾ PEP 7 "C Code ਲਈ Style Guide" ਅਤੇ PEP 11 "CPython platform support" ਵੀ ਵੇਖੋ।

3.1.1. ਵਿਕਲਪਿਕ ਮੋਡੀਊਲਾਂ ਲਈ ਲੋੜਾਂ

Standard library ਦੇ ਕੁਝ ਵਿਕਲਪਿਕ ਮੋਡੀਊਲ ਵਿਕਾਸ ਲਈ ਸਥਾਪਿਤ ਤੀਜੇ-ਧਿਰ ਦੀਆਂ libraries ਦੀ ਲੋੜ ਰੱਖਦੇ ਹਨ (ਉਦਾਹਰਨ ਵਜੋਂ, header files ਉਪਲਬਧ ਹੋਣੀਆਂ ਚਾਹੀਦੀਆਂ ਹਨ)।

ਗੁੰਮ ਲੋੜਾਂ ਦੀ ਜਾਣਕਾਰੀ configure ਦੇ output ਵਿੱਚ ਦਿੱਤੀ ਜਾਂਦੀ ਹੈ। ਜਿਹੜੇ ਮੋਡੀਊਲ ਗੁੰਮ dependencies ਕਰਕੇ ਉਪਲਬਧ ਨਹੀਂ ਹੁੰਦੇ, ਉਹ make ਦੇ output ਦੇ ਅੰਤ ਵਿੱਚ ਦਰਸਾਏ ਜਾਂਦੇ ਹਨ, ਕਈ ਵਾਰ ਉਹਨਾਂ ਦੇ ਅੰਦਰੂਨੀ ਨਾਮ ਨਾਲ, ਉਦਾਹਰਨ ਲਈ ctypes ਮੋਡੀਊਲ ਲਈ _ctypes।

ਜੇ ਤੁਸੀਂ ਵਿਕਲਪਿਕ ਮੋਡੀਊਲਾਂ ਤੋਂ ਬਿਨਾਂ CPython interpreter ਵੰਡਦੇ ਹੋ, ਤਾਂ ਵਰਤੋਂਕਾਰਾਂ ਨੂੰ ਇਸ ਬਾਰੇ ਜਾਣਕਾਰੀ ਦੇਣਾ ਸਭ ਤੋਂ ਵਧੀਆ ਅਭਿਆਸ ਹੈ, ਕਿਉਂਕਿ ਉਹ ਆਮ ਤੌਰ 'ਤੇ ਉਮੀਦ ਕਰਦੇ ਹਨ ਕਿ standard library ਦੇ ਮੋਡੀਊਲ ਉਪਲਬਧ ਹੋਣਗੇ।

ਵਿਕਲਪਿਕ ਮੋਡੀਊਲਾਂ ਨੂੰ ਬਿਲਡ ਕਰਨ ਲਈ ਲੋੜੀਂਦੀਆਂ dependencies ਇਹ ਹਨ:

Dependency

ਘੱਟੋ-ਘੱਟ ਸੰਸਕਰਣ

Python ਮੋਡੀਊਲ

libbz2

bz2

libffi

3.3.0 ਦੀ ਸਿਫ਼ਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ

ctypes

liblzma

lzma

libmpdec

2.5.0

decimal [1]

libreadline ਜਾਂ libedit [2]

readline

libuuid

_uuid [3]

ncurses [4]

curses

OpenSSL

[6]

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

ਧਿਆਨ ਰਹੇ ਕਿ ਇਸ ਸਾਰਣੀ ਵਿੱਚ ਸਾਰੇ ਵਿਕਲਪਿਕ ਮੋਡੀਊਲ ਸ਼ਾਮਲ ਨਹੀਂ ਹਨ; ਖ਼ਾਸ ਤੌਰ 'ਤੇ platform-ਵਿਸ਼ੇਸ਼ ਮੋਡੀਊਲ, ਜਿਵੇਂ winreg, ਇੱਥੇ ਸੂਚੀਬੱਧ ਨਹੀਂ ਹਨ।

See also

  • devguide ਵਿੱਚ ਸਾਰੇ ਮੋਡੀਊਲਾਂ ਨੂੰ ਬਿਲਡ ਕਰਨ ਲਈ ਲੋੜੀਂਦੀਆਂ dependencies ਦੀ ਪੂਰੀ ਸੂਚੀ ਅਤੇ ਆਮ platforms ਉੱਤੇ ਉਹਨਾਂ ਨੂੰ ਸਥਾਪਿਤ ਕਰਨ ਦੀਆਂ ਹਦਾਇਤਾਂ ਦਿੱਤੀਆਂ ਗਈਆਂ ਹਨ।

  • --with-system-expat ਬਾਹਰੀ libexpat library ਨਾਲ ਬਿਲਡ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ।

  • ਤੀਜੀ-ਧਿਰ dependencies ਲਈ ਵਿਕਲਪ

Changed in version 3.1: ਹੁਣ tkinter ਲਈ Tcl/Tk ਸੰਸਕਰਣ 8.3.1 ਲਾਜ਼ਮੀ ਹੈ।

Changed in version 3.5: ਹੁਣ tkinter ਲਈ Tcl/Tk ਸੰਸਕਰਣ 8.4 ਲਾਜ਼ਮੀ ਹੈ।

Changed in version 3.7: ਹੁਣ hashlib ਅਤੇ ssl ਲਈ OpenSSL 1.0.2 ਲਾਜ਼ਮੀ ਹੈ।

Changed in version 3.10: ਹੁਣ hashlib ਅਤੇ ssl ਲਈ OpenSSL 1.1.1 ਲਾਜ਼ਮੀ ਹੈ। ਹੁਣ sqlite3 ਲਈ SQLite 3.7.15 ਲਾਜ਼ਮੀ ਹੈ।

Changed in version 3.11: ਹੁਣ tkinter ਲਈ Tcl/Tk ਸੰਸਕਰਣ 8.5.12 ਲਾਜ਼ਮੀ ਹੈ।

Changed in version 3.13: ਹੁਣ sqlite3 ਲਈ SQLite 3.15.2 ਲਾਜ਼ਮੀ ਹੈ।

3.2. ਜਨਰੇਟ ਕੀਤੀਆਂ ਫਾਈਲਾਂ

ਬਿਲਡ dependencies ਨੂੰ ਘਟਾਉਣ ਲਈ, Python ਦੇ source code ਵਿੱਚ ਕਈ ਪਹਿਲਾਂ ਤੋਂ ਤਿਆਰ ਕੀਤੀਆਂ ਫ਼ਾਈਲਾਂ ਸ਼ਾਮਲ ਹਨ। ਸਾਰੀਆਂ ਤਿਆਰ ਕੀਤੀਆਂ ਫ਼ਾਈਲਾਂ ਨੂੰ ਮੁੜ ਬਣਾਉਣ ਲਈ ਹੇਠ ਲਿਖੀਆਂ ਕਮਾਂਡਾਂ ਵਰਤੋ:

make regen-all
make regen-stdlib-module-names
make regen-limited-abi
make regen-configure

Makefile.pre.in ਫ਼ਾਈਲ ਵਿੱਚ ਤਿਆਰ ਕੀਤੀਆਂ ਫ਼ਾਈਲਾਂ, ਉਹਨਾਂ ਦੇ inputs ਅਤੇ ਉਹਨਾਂ ਨੂੰ ਮੁੜ ਬਣਾਉਣ ਲਈ ਵਰਤੇ ਜਾਣ ਵਾਲੇ tools ਦਾ ਵੇਰਵਾ ਦਿੱਤਾ ਗਿਆ ਹੈ। regen-* make targets ਖੋਜੋ।

3.2.1. configure ਸਕ੍ਰਿਪਟ

make regen-configure ਕਮਾਂਡ Tools/build/regen-configure.sh shell script ਦੀ ਵਰਤੋਂ ਕਰਕੇ aclocal.m4 ਫ਼ਾਈਲ ਅਤੇ configure ਸਕ੍ਰਿਪਟ ਨੂੰ ਮੁੜ ਤਿਆਰ ਕਰਦੀ ਹੈ। ਇਹ script ਇੱਕ Ubuntu container ਦੀ ਵਰਤੋਂ ਕਰਦੀ ਹੈ ਤਾਂ ਜੋ tools ਦੇ ਇੱਕੋ ਜਿਹੇ versions ਵਰਤੇ ਜਾਣ ਅਤੇ ਦੁਹਰਾਏ ਜਾ ਸਕਣ ਵਾਲਾ output ਮਿਲੇ।

Container ਲਾਜ਼ਮੀ ਨਹੀਂ ਹੈ; ਹੇਠਾਂ ਦਿੱਤੀ ਕਮਾਂਡ ਸਥਾਨਕ ਤੌਰ 'ਤੇ ਵੀ ਚਲਾਈ ਜਾ ਸਕਦੀ ਹੈ:

autoreconf -ivf -Werror

ਤਿਆਰ ਕੀਤੀਆਂ ਫ਼ਾਈਲਾਂ ਵਰਤੇ ਗਏ tools ਦੇ ਸਹੀ versions ਦੇ ਅਨੁਸਾਰ ਬਦਲ ਸਕਦੀਆਂ ਹਨ। CPython ਵੱਲੋਂ ਵਰਤੇ ਜਾਣ ਵਾਲੇ container ਵਿੱਚ Autoconf 2.72, Automake 1.16.5 ਦਾ aclocal ਅਤੇ pkg-config 1.8.1 ਸ਼ਾਮਲ ਹਨ।

Changed in version 3.13: ਹੁਣ configure ਨੂੰ ਮੁੜ ਤਿਆਰ ਕਰਨ ਲਈ Autoconf 2.71 ਅਤੇ aclocal 1.16.5 ਵਰਤੇ ਜਾਂਦੇ ਹਨ।

Changed in version 3.14: ਹੁਣ configure ਨੂੰ ਮੁੜ ਤਿਆਰ ਕਰਨ ਲਈ Autoconf 2.72 ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ।

3.3. Configure ਵਿਕਲਪ

configure ਸਕ੍ਰਿਪਟ ਦੇ ਸਾਰੇ ਵਿਕਲਪਾਂ ਦੀ ਸੂਚੀ ਵੇਖਣ ਲਈ:

./configure --help

Python source distribution ਵਿੱਚ ਮੌਜੂਦ Misc/SpecialBuilds.txt ਵੀ ਵੇਖੋ।

3.3.1. ਆਮ ਵਿਕਲਪ

--enable-loadable-sqlite-extensions

sqlite3 ਮੋਡੀਊਲ ਦੇ _sqlite extension module ਵਿੱਚ load ਹੋਣ ਵਾਲੀਆਂ extensions ਲਈ ਸਮਰਥਨ (ਮੂਲ ਰੂਪ ਵਿੱਚ ਨਹੀਂ)।

sqlite3 ਮੋਡੀਊਲ ਦੀ sqlite3.Connection.enable_load_extension() ਵਿਧੀ ਵੇਖੋ।

Added in version 3.6.

--disable-ipv6

IPv6 ਸਮਰਥਨ ਨੂੰ ਅਸਮਰੱਥ ਕਰੋ (ਜੇ ਸਮਰਥਿਤ ਹੋਵੇ ਤਾਂ ਮੂਲ ਰੂਪ ਵਿੱਚ ਸਮਰੱਥ ਹੁੰਦਾ ਹੈ)। ਵੇਰਵਿਆਂ ਲਈ socket ਮੋਡੀਊਲ ਵੇਖੋ।

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

Python int ਅੰਕਾਂ ਦਾ ਆਕਾਰ bits ਵਿੱਚ ਨਿਰਧਾਰਤ ਕਰੋ: 15 ਜਾਂ 30 bits।

ਮੂਲ ਰੂਪ ਵਿੱਚ ਅੰਕਾਂ ਦਾ ਆਕਾਰ 30 ਹੁੰਦਾ ਹੈ।

Define PYLONG_BITS_IN_DIGIT to 15 or 30.

sys.int_info.bits_per_digit ਵੇਖੋ।

--with-suffix=SUFFIX

Python executable ਲਈ SUFFIX suffix ਸੈੱਟ ਕਰੋ।

Windows ਅਤੇ macOS ਉੱਤੇ ਮੂਲ suffix .exe ਹੈ (python.exe executable), Emscripten node ਉੱਤੇ .js, Emscripten browser ਉੱਤੇ .html, WASI ਉੱਤੇ .wasm ਅਤੇ ਹੋਰ platforms ਉੱਤੇ ਖਾਲੀ string (python executable) ਹੁੰਦੀ ਹੈ।

Changed in version 3.11: WASM platform ਉੱਤੇ ਮੂਲ suffix .js, .html ਜਾਂ .wasm ਵਿੱਚੋਂ ਇੱਕ ਹੁੰਦਾ ਹੈ।

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

zoneinfo.TZPATH ਲਈ ਮੂਲ time zone ਖੋਜ ਮਾਰਗ ਚੁਣੋ। ਵੇਰਵਿਆਂ ਲਈ zoneinfo ਮੋਡੀਊਲ ਦੀ Compile-time configuration ਵੇਖੋ।

ਮੂਲ ਮੁੱਲ: /usr/share/zoneinfo:/usr/lib/zoneinfo:/usr/share/lib/zoneinfo:/etc/zoneinfo।

os.pathsep path separator ਵੇਖੋ।

Added in version 3.9.

--without-decimal-contextvar

_decimal extension module ਨੂੰ coroutine-local context (ਮੂਲ ਰੂਪ) ਦੀ ਬਜਾਏ thread-local context ਨਾਲ ਬਿਲਡ ਕਰੋ। ਵੇਰਵਿਆਂ ਲਈ decimal ਮੋਡੀਊਲ ਵੇਖੋ।

decimal.HAVE_CONTEXTVAR ਅਤੇ contextvars ਮੋਡੀਊਲ ਵੇਖੋ।

Added in version 3.9.

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

dbm ਮੋਡੀਊਲ ਲਈ db backends ਦੀ ਜਾਂਚ ਕਰਨ ਦਾ ਕ੍ਰਮ override ਕਰੋ।

ਵੈਧ ਮੁੱਲ colon (:) ਨਾਲ ਵੱਖ ਕੀਤੀ ਗਈ backend names ਦੀ string ਹੈ:

  • ndbm;

  • gdbm;

  • bdb.

--without-c-locale-coercion

C locale ਨੂੰ UTF-8 ਆਧਾਰਿਤ locale ਵਿੱਚ coercion ਕਰਨ ਦੀ ਵਿਵਸਥਾ ਅਸਮਰੱਥ ਕਰੋ (ਮੂਲ ਰੂਪ ਵਿੱਚ ਸਮਰੱਥ ਹੁੰਦੀ ਹੈ)।

PY_COERCE_C_LOCALE macro ਨੂੰ ਪਰਿਭਾਸ਼ਿਤ ਨਾ ਕਰੋ।

PYTHONCOERCECLOCALE ਅਤੇ PEP 538 ਵੇਖੋ।

--with-platlibdir=DIRNAME

Python library directory ਦਾ ਨਾਮ (ਮੂਲ ਰੂਪ ਵਿੱਚ lib)।

Fedora ਅਤੇ SuSE 64-bit platforms ਉੱਤੇ lib64 ਵਰਤਦੇ ਹਨ।

sys.platlibdir ਵੇਖੋ।

Added in version 3.9.

--with-wheel-pkg-dir=PATH

ensurepip ਮੋਡੀਊਲ ਦੁਆਰਾ ਵਰਤੇ ਜਾਣ ਵਾਲੇ wheel packages ਦੀ ਡਾਇਰੈਕਟਰੀ (ਮੂਲ ਰੂਪ ਵਿੱਚ ਕੋਈ ਨਹੀਂ)।

ਕੁਝ Linux distributions ਦੀਆਂ packaging policies dependencies ਨੂੰ bundle ਕਰਨ ਦੇ ਵਿਰੁੱਧ ਸਿਫ਼ਾਰਸ਼ ਕਰਦੀਆਂ ਹਨ। ਉਦਾਹਰਨ ਲਈ, Fedora wheel packages ਨੂੰ /usr/share/python-wheels/ ਡਾਇਰੈਕਟਰੀ ਵਿੱਚ ਸਥਾਪਿਤ ਕਰਦਾ ਹੈ ਅਤੇ ensurepip._bundled package ਨੂੰ ਸਥਾਪਿਤ ਨਹੀਂ ਕਰਦਾ।

Added in version 3.10.

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

ਕੀ configure ਨੂੰ build dependencies ਦੀ ਪਛਾਣ ਕਰਨ ਲਈ pkg-config ਦੀ ਵਰਤੋਂ ਕਰਨੀ ਚਾਹੀਦੀ ਹੈ।

  • check (ਮੂਲ): pkg-config ਵਿਕਲਪਿਕ ਹੈ

  • yes: pkg-config ਲਾਜ਼ਮੀ ਹੈ

  • no: configure pkg-config ਮੌਜੂਦ ਹੋਣ ਦੇ ਬਾਵਜੂਦ ਇਸਦੀ ਵਰਤੋਂ ਨਹੀਂ ਕਰਦਾ

Added in version 3.11.

--with-missing-stdlib-config=FILE

ਗੁੰਮ ਹੋਏ standard library ਮੋਡੀਊਲਾਂ ਲਈ ਕਸਟਮ ਗਲਤੀ ਸੁਨੇਹੇ ਰੱਖਣ ਵਾਲੀ JSON configuration file ਦਾ ਮਾਰਗ।

ਇਹ ਵਿਕਲਪ ਉਹਨਾਂ Python distributors ਲਈ ਹੈ ਜੋ ਚਾਹੁੰਦੇ ਹਨ ਕਿ ਜਦੋਂ ਵਰਤੋਂਕਾਰਾਂ ਨੂੰ standard library ਦੇ ਅਜਿਹੇ ਮੋਡੀਊਲ ਮਿਲਣ ਜੋ ਗੁੰਮ ਹੋਣ ਜਾਂ ਵੱਖਰੇ package ਵਜੋਂ ਦਿੱਤੇ ਗਏ ਹੋਣ, ਤਾਂ distribution-ਵਿਸ਼ੇਸ਼ ਮਾਰਗਦਰਸ਼ਨ ਦਿੱਤਾ ਜਾ ਸਕੇ।

JSON ਫ਼ਾਈਲ ਵਿੱਚ ਗੁੰਮ ਮੋਡੀਊਲਾਂ ਦੇ ਨਾਮਾਂ ਨੂੰ ਕਸਟਮ ਗਲਤੀ ਸੁਨੇਹਿਆਂ ਨਾਲ map ਕੀਤਾ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ। ਉਦਾਹਰਨ ਲਈ, ਜੇ ਤੁਹਾਡੀ distribution tkinter ਅਤੇ _tkinter ਨੂੰ ਵੱਖ-ਵੱਖ packages ਵਜੋਂ ਵੰਡਦੀ ਹੈ ਅਤੇ ਕਾਨੂੰਨੀ ਕਾਰਨਾਂ ਕਰਕੇ _gdbm ਨੂੰ ਸ਼ਾਮਲ ਨਹੀਂ ਕਰਦੀ, ਤਾਂ configuration ਵਿੱਚ ਇਹ ਹੋ ਸਕਦਾ ਹੈ:

{
"_gdbm": "The '_gdbm' module is not available in this distribution",
"tkinter": "Install the python-tk package to use tkinter",
"_tkinter": "Install the python-tk package to use tkinter",
}

Added in version 3.15.

--enable-pystats

Python ਦੀ ਅੰਦਰੂਨੀ ਕਾਰਗੁਜ਼ਾਰੀ ਦੇ ਅੰਕੜੇ ਇਕੱਠੇ ਕਰਨ ਦੀ ਸੁਵਿਧਾ ਸਮਰੱਥ ਕਰੋ।

ਮੂਲ ਰੂਪ ਵਿੱਚ ਅੰਕੜੇ ਇਕੱਠੇ ਕਰਨ ਦੀ ਸੁਵਿਧਾ ਬੰਦ ਹੁੰਦੀ ਹੈ। Python ਸ਼ੁਰੂ ਹੋਣ ਸਮੇਂ ਅੰਕੜੇ ਇਕੱਠੇ ਕਰਨ ਲਈ python3 -X pystats ਕਮਾਂਡ ਵਰਤੋ ਜਾਂ PYTHONSTATS=1 environment variable ਸੈੱਟ ਕਰੋ।

ਜੇ ਅੰਕੜੇ ਇਕੱਠੇ ਕਰਨ ਦੀ ਸੁਵਿਧਾ ਚਾਲੂ ਸੀ ਅਤੇ ਅੰਕੜੇ ਸਾਫ਼ ਨਹੀਂ ਕੀਤੇ ਗਏ, ਤਾਂ Python ਬੰਦ ਹੋਣ ਸਮੇਂ ਅੰਕੜੇ ਡੰਪ ਕੀਤੇ ਜਾਣਗੇ।

ਅਸਰ:

  • -X pystats command line ਵਿਕਲਪ ਜੋੜੋ।

  • PYTHONSTATS environment variable ਜੋੜੋ।

  • Py_STATS macro ਪਰਿਭਾਸ਼ਿਤ ਕਰੋ।

  • sys ਮੋਡੀਊਲ ਵਿੱਚ ਹੇਠ ਲਿਖੇ functions ਸ਼ਾਮਲ ਕਰੋ:

    • sys._stats_on(): ਅੰਕੜੇ ਇਕੱਠੇ ਕਰਨ ਦੀ ਪ੍ਰਕਿਰਿਆ ਚਾਲੂ ਕਰਦਾ ਹੈ।

    • sys._stats_off(): ਅੰਕੜੇ ਇਕੱਠੇ ਕਰਨ ਦੀ ਪ੍ਰਕਿਰਿਆ ਬੰਦ ਕਰਦਾ ਹੈ।

    • sys._stats_clear(): ਅੰਕੜੇ ਸਾਫ਼ ਕਰਦਾ ਹੈ।

    • sys._stats_dump(): ਅੰਕੜਿਆਂ ਨੂੰ ਫ਼ਾਈਲ ਵਿੱਚ ਡੰਪ ਕਰਦਾ ਹੈ ਅਤੇ ਫਿਰ ਉਹਨਾਂ ਨੂੰ ਸਾਫ਼ ਕਰਦਾ ਹੈ।

ਅੰਕੜੇ /tmp/py_stats/ (Unix) ਜਾਂ C:\temp\py_stats\ (Windows) ਵਿੱਚ ਕਿਸੇ ਮਨਮਾਨੀ (ਸੰਭਵਤ: ਵਿਲੱਖਣ) ਫ਼ਾਈਲ ਵਿੱਚ ਡੰਪ ਕੀਤੇ ਜਾਣਗੇ। ਜੇ ਉਹ ਡਾਇਰੈਕਟਰੀ ਮੌਜੂਦ ਨਾ ਹੋਵੇ, ਤਾਂ ਨਤੀਜੇ stderr ਉੱਤੇ ਛਾਪੇ ਜਾਣਗੇ।

ਅੰਕੜੇ ਪੜ੍ਹਨ ਲਈ Tools/scripts/summarize_stats.py ਵਰਤੋ।

ਅੰਕੜੇ:

  • Opcode:

    • Specialization: success, failure, hit, deferred, miss, deopt, failures;

    • ਚਲਾਉਣ ਦੀ ਗਿਣਤੀ;

    • ਜੋੜਿਆਂ ਦੀ ਗਿਣਤੀ।

  • Call:

    • Inline ਕੀਤੀਆਂ Python calls;

    • PyEval calls;

    • Push ਕੀਤੇ frames;

    • ਬਣਾਏ ਗਏ frame objects;

    • Eval calls: vector, generator, legacy, function VECTORCALL, build class, slot, function "ex", API, method।

  • Object:

    • incref ਅਤੇ decref;

    • interpreter incref ਅਤੇ decref;

    • ਮੈਮੋਰੀ allocations: ਸਾਰੀਆਂ, 512 bytes, 4 kiB, ਵੱਡੀਆਂ;

    • free;

    • free lists ਵਿੱਚ/ਤੋਂ;

    • materialized/dematerialized dictionaries;

    • type cache;

    • optimization ਦੀਆਂ ਕੋਸ਼ਿਸ਼ਾਂ;

    • ਬਣਾਏ/ਚਲਾਏ ਗਏ optimization traces;

    • ਚਲਾਏ ਗਏ uops।

  • Garbage collector:

    • Garbage collections;

    • ਵੇਖੇ ਗਏ objects;

    • ਇਕੱਠੇ ਕੀਤੇ ਗਏ objects।

Added in version 3.11.

--disable-gil

global interpreter lock (GIL) ਤੋਂ ਬਿਨਾਂ Python ਚਲਾਉਣ ਲਈ ਸਮਰਥਨ ਸਮਰੱਥ ਕਰਦਾ ਹੈ: free-threaded build।

Py_GIL_DISABLED macro ਪਰਿਭਾਸ਼ਿਤ ਕਰਦਾ ਹੈ ਅਤੇ sys.abiflags ਵਿੱਚ "t" ਜੋੜਦਾ ਹੈ।

ਹੋਰ ਵੇਰਵਿਆਂ ਲਈ Free-threaded CPython ਵੇਖੋ।

Added in version 3.13.

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

ਇਹ ਨਿਰਧਾਰਤ ਕਰੋ ਕਿ experimental just-in-time compiler ਨੂੰ ਕਿਵੇਂ ਏਕੀਕ੍ਰਿਤ ਕਰਨਾ ਹੈ।

  • no: JIT ਨਾ ਬਣਾਓ।

  • yes: JIT ਸਮਰੱਥ ਕਰੋ। ਰਨਟਾਈਮ ਦੌਰਾਨ ਇਸਨੂੰ ਅਸਮਰੱਥ ਕਰਨ ਲਈ PYTHON_JIT=0 environment variable ਸੈੱਟ ਕਰੋ।

  • yes-off: JIT ਬਣਾਓ, ਪਰ ਇਸਨੂੰ ਮੂਲ ਰੂਪ ਵਿੱਚ ਅਸਮਰੱਥ ਰੱਖੋ। ਰਨਟਾਈਮ ਦੌਰਾਨ ਇਸਨੂੰ ਸਮਰੱਥ ਕਰਨ ਲਈ PYTHON_JIT=1 environment variable ਸੈੱਟ ਕਰੋ।

  • interpreter: "JIT interpreter" ਨੂੰ ਸਮਰੱਥ ਕਰੋ (ਇਹ ਕੇਵਲ ਉਹਨਾਂ ਲਈ ਲਾਭਦਾਇਕ ਹੈ ਜੋ JIT ਦੀ ਖੁਦ ਡੀਬੱਗਿੰਗ ਕਰ ਰਹੇ ਹਨ)। ਰਨਟਾਈਮ ਦੌਰਾਨ ਇਸਨੂੰ ਅਸਮਰੱਥ ਕਰਨ ਲਈ PYTHON_JIT=0 environment variable ਸੈੱਟ ਕਰੋ।

ਜੇ ਇਹ ਵਿਕਲਪ ਨਾ ਦਿੱਤਾ ਜਾਵੇ, ਤਾਂ --enable-experimental-jit=no ਮੂਲ ਵਿਵਹਾਰ ਹੈ, ਅਤੇ --enable-experimental-jit , --enable-experimental-jit=yes ਦਾ ਸੰਖੇਪ ਰੂਪ ਹੈ। ਲੋੜੀਂਦੀਆਂ build-time dependencies ਨੂੰ ਇੰਸਟਾਲ ਕਰਨ ਸਮੇਤ ਹੋਰ ਜਾਣਕਾਰੀ ਲਈ Tools/jit/README.md ਵੇਖੋ।

Note

JIT ਸਮਰੱਥ ਕਰਕੇ CPython ਬਣਾਉਂਦੇ ਸਮੇਂ ਯਕੀਨੀ ਬਣਾਓ ਕਿ ਤੁਹਾਡੇ ਸਿਸਟਮ 'ਤੇ Python 3.11 ਜਾਂ ਇਸ ਤੋਂ ਬਾਅਦ ਦਾ ਸੰਸਕਰਣ ਇੰਸਟਾਲ ਹੈ।

Added in version 3.13.

PKG_CONFIG

pkg-config utility ਦਾ ਮਾਰਗ।

PKG_CONFIG_LIBDIR
PKG_CONFIG_PATH

pkg-config ਦੇ ਵਿਕਲਪ।

--disable-epoll

epoll ਤੋਂ ਬਿਨਾਂ build ਕਰੋ, ਜਿਸਦਾ ਅਰਥ ਹੈ ਕਿ select.epoll() ਮੌਜੂਦ ਨਹੀਂ ਹੋਵੇਗਾ, ਭਾਵੇਂ ਸਿਸਟਮ epoll_create function ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੋਵੇ। ਇਹ ਉਹਨਾਂ ਸਿਸਟਮਾਂ 'ਤੇ ਵਰਤਿਆ ਜਾ ਸਕਦਾ ਹੈ ਜਿੱਥੇ epoll_create ਜਾਂ epoll_create1 ਉਪਲਬਧ ਹੈ ਪਰ Linux semantics ਨਾਲ ਅਨੁਕੂਲ ਨਹੀਂ ਹੈ।

Added in version 3.15.

3.3.2. C compiler ਦੇ ਵਿਕਲਪ

CC

C compiler ਕਮਾਂਡ।

CFLAGS

C compiler flags।

CPP

C preprocessor ਕਮਾਂਡ।

CPPFLAGS

C preprocessor flags, ਉਦਾਹਰਨ ਲਈ -Iinclude_dir।

3.3.3. Linker ਦੇ ਵਿਕਲਪ

LDFLAGS

Linker flags, ਉਦਾਹਰਨ ਲਈ -Llibrary_directory।

LIBS

Linker ਨੂੰ ਦਿੱਤੀਆਂ ਜਾਣ ਵਾਲੀਆਂ libraries, ਉਦਾਹਰਨ ਲਈ -llibrary।

MACHDEP

ਮਸ਼ੀਨ-ਨਿਰਭਰ library ਫ਼ਾਈਲਾਂ ਲਈ ਨਾਮ।

3.3.4. ਤੀਜੀ-ਧਿਰ dependencies ਲਈ ਵਿਕਲਪ

Added in version 3.11.

BZIP2_CFLAGS
BZIP2_LIBS

bz2 ਮੋਡੀਊਲ ਦੁਆਰਾ ਵਰਤੀ ਜਾਣ ਵਾਲੀ libbz2 ਲਈ C compiler ਅਤੇ linker flags, ਜੋ pkg-config ਨੂੰ override ਕਰਦੇ ਹਨ।

CURSES_CFLAGS
CURSES_LIBS

curses ਮੋਡੀਊਲ ਦੁਆਰਾ ਵਰਤੀ ਜਾਣ ਵਾਲੀ libncurses ਜਾਂ libncursesw ਲਈ C compiler ਅਤੇ linker flags, ਜੋ pkg-config ਨੂੰ override ਕਰਦੇ ਹਨ।

GDBM_CFLAGS
GDBM_LIBS

gdbm ਲਈ C compiler ਅਤੇ linker flags।

LIBEDIT_CFLAGS
LIBEDIT_LIBS

readline ਮੋਡੀਊਲ ਦੁਆਰਾ ਵਰਤੀ ਜਾਣ ਵਾਲੀ libedit ਲਈ C compiler ਅਤੇ linker flags, ਜੋ pkg-config ਨੂੰ override ਕਰਦੇ ਹਨ।

LIBFFI_CFLAGS
LIBFFI_LIBS

ctypes ਮੋਡੀਊਲ ਦੁਆਰਾ ਵਰਤੀ ਜਾਣ ਵਾਲੀ libffi ਲਈ C compiler ਅਤੇ linker flags, ਜੋ pkg-config ਨੂੰ override ਕਰਦੇ ਹਨ।

LIBMPDEC_CFLAGS
LIBMPDEC_LIBS

decimal ਮੋਡੀਊਲ ਦੁਆਰਾ ਵਰਤੀ ਜਾਣ ਵਾਲੀ libmpdec ਲਈ C compiler ਅਤੇ linker flags, ਜੋ pkg-config ਨੂੰ override ਕਰਦੇ ਹਨ।

Note

ਜਦ ਤੱਕ --with-system-libmpdec ਨਿਰਧਾਰਤ ਨਹੀਂ ਕੀਤਾ ਜਾਂਦਾ, ਇਹ environment variables ਕੋਈ ਅਸਰ ਨਹੀਂ ਕਰਦੇ।

LIBLZMA_CFLAGS
LIBLZMA_LIBS

lzma ਮੋਡੀਊਲ ਦੁਆਰਾ ਵਰਤੀ ਜਾਣ ਵਾਲੀ liblzma ਲਈ C compiler ਅਤੇ linker flags, ਜੋ pkg-config ਨੂੰ override ਕਰਦੇ ਹਨ।

LIBREADLINE_CFLAGS
LIBREADLINE_LIBS

readline ਮੋਡੀਊਲ ਦੁਆਰਾ ਵਰਤੀ ਜਾਣ ਵਾਲੀ libreadline ਲਈ C compiler ਅਤੇ linker flags, ਜੋ pkg-config ਨੂੰ override ਕਰਦੇ ਹਨ।

LIBSQLITE3_CFLAGS
LIBSQLITE3_LIBS

sqlite3 ਮੋਡੀਊਲ ਦੁਆਰਾ ਵਰਤੀ ਜਾਣ ਵਾਲੀ libsqlite3 ਲਈ C compiler ਅਤੇ linker flags, ਜੋ pkg-config ਨੂੰ override ਕਰਦੇ ਹਨ।

LIBUUID_CFLAGS
LIBUUID_LIBS

uuid ਮੋਡੀਊਲ ਦੁਆਰਾ ਵਰਤੀ ਜਾਣ ਵਾਲੀ libuuid ਲਈ C compiler ਅਤੇ linker flags, ਜੋ pkg-config ਨੂੰ override ਕਰਦੇ ਹਨ।

LIBZSTD_CFLAGS
LIBZSTD_LIBS

compression.zstd ਮੋਡੀਊਲ ਦੁਆਰਾ ਵਰਤੀ ਜਾਣ ਵਾਲੀ libzstd ਲਈ C compiler ਅਤੇ linker flags, ਜੋ pkg-config ਨੂੰ override ਕਰਦੇ ਹਨ।

Added in version 3.14.

PANEL_CFLAGS
PANEL_LIBS

PANEL ਲਈ C compiler ਅਤੇ linker flags, ਜੋ pkg-config ਨੂੰ override ਕਰਦੇ ਹਨ।

curses.panel ਮੋਡੀਊਲ ਦੁਆਰਾ ਵਰਤੀ ਜਾਣ ਵਾਲੀ libpanel ਜਾਂ libpanelw ਲਈ C compiler ਅਤੇ linker flags, ਜੋ pkg-config ਨੂੰ override ਕਰਦੇ ਹਨ।

TCLTK_CFLAGS
TCLTK_LIBS

TCLTK ਲਈ C compiler ਅਤੇ linker flags, ਜੋ pkg-config ਨੂੰ override ਕਰਦੇ ਹਨ।

ZLIB_CFLAGS
ZLIB_LIBS

gzip ਮੋਡੀਊਲ ਦੁਆਰਾ ਵਰਤੀ ਜਾਣ ਵਾਲੀ libzlib ਲਈ C compiler ਅਤੇ linker flags, ਜੋ pkg-config ਨੂੰ override ਕਰਦੇ ਹਨ।

3.3.5. WebAssembly ਦੇ ਵਿਕਲਪ

--enable-wasm-dynamic-linking

WASM ਲਈ dynamic linking ਸਮਰਥਨ ਸਮਰੱਥ ਕਰੋ।

Dynamic linking, dlopen ਨੂੰ ਸਮਰੱਥ ਬਣਾਉਂਦੀ ਹੈ। ਸੀਮਿਤ dead code elimination ਅਤੇ ਵਾਧੂ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਕਾਰਨ executable ਦੀ ਫ਼ਾਈਲ ਆਕਾਰ ਵੱਧ ਜਾਂਦੀ ਹੈ।

Added in version 3.11.

--enable-wasm-pthreads

WASM ਲਈ pthreads ਸਮਰਥਨ ਸਮਰੱਥ ਕਰੋ।

Added in version 3.11.

3.3.6. ਇੰਸਟਾਲੇਸ਼ਨ ਦੇ ਵਿਕਲਪ

--prefix=PREFIX

ਆਰਕੀਟੈਕਚਰ-ਤੋਂ-ਸੁਤੰਤਰ ਫ਼ਾਈਲਾਂ ਨੂੰ PREFIX ਵਿੱਚ ਇੰਸਟਾਲ ਕਰੋ। Unix 'ਤੇ ਮੂਲ ਰੂਪ ਵਿੱਚ ਇਹ /usr/local ਹੁੰਦਾ ਹੈ।

ਇਹ ਮੁੱਲ ਰਨਟਾਈਮ ਦੌਰਾਨ sys.prefix ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਪ੍ਰਾਪਤ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ।

ਉਦਾਹਰਨ ਵਜੋਂ, --prefix="$HOME/.local/" ਦੀ ਵਰਤੋਂ ਕਰਕੇ Python ਨੂੰ ਆਪਣੇ home directory ਵਿੱਚ ਇੰਸਟਾਲ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ।

--exec-prefix=EPREFIX

ਆਰਕੀਟੈਕਚਰ-ਨਿਰਭਰ ਫ਼ਾਈਲਾਂ ਨੂੰ EPREFIX ਵਿੱਚ ਇੰਸਟਾਲ ਕਰੋ; ਮੂਲ ਰੂਪ ਵਿੱਚ ਇਹ --prefix ਦੇ ਬਰਾਬਰ ਹੁੰਦਾ ਹੈ।

ਇਹ ਮੁੱਲ ਰਨਟਾਈਮ ਦੌਰਾਨ sys.exec_prefix ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਪ੍ਰਾਪਤ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ।

--disable-test-modules

ਟੈਸਟ ਮੋਡੀਊਲ ਜਿਵੇਂ test package ਜਾਂ _testcapi extension module ਨਾ ਬਣਾਓ ਅਤੇ ਨਾ ਹੀ ਇੰਸਟਾਲ ਕਰੋ (ਮੂਲ ਰੂਪ ਵਿੱਚ ਇਹ ਬਣਾਏ ਅਤੇ ਇੰਸਟਾਲ ਕੀਤੇ ਜਾਂਦੇ ਹਨ)।

Added in version 3.10.

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

Python ਇੰਸਟਾਲੇਸ਼ਨ ਦੌਰਾਨ ਚਲਾਈ ਜਾਣ ਵਾਲੀ ensurepip ਕਮਾਂਡ ਚੁਣੋ:

  • upgrade (ਮੂਲ): python -m ensurepip --altinstall --upgrade ਕਮਾਂਡ ਚਲਾਓ।

  • install: python -m ensurepip --altinstall ਕਮਾਂਡ ਚਲਾਓ;

  • no: ensurepip ਨਾ ਚਲਾਓ;

Added in version 3.6.

3.3.7. ਕਾਰਗੁਜ਼ਾਰੀ ਦੇ ਵਿਕਲਪ

ਸਭ ਤੋਂ ਵਧੀਆ ਕਾਰਗੁਜ਼ਾਰੀ ਲਈ --enable-optimizations --with-lto (PGO + LTO) ਨਾਲ Python ਨੂੰ configure ਕਰਨ ਦੀ ਸਿਫ਼ਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਕਾਰਗੁਜ਼ਾਰੀ ਵਿੱਚ ਹੋਰ ਸੁਧਾਰ ਲਈ ਪ੍ਰਯੋਗਾਤਮਕ --enable-bolt flag ਵੀ ਵਰਤੀ ਜਾ ਸਕਦੀ ਹੈ।

--enable-optimizations

PROFILE_TASK ਦੀ ਵਰਤੋਂ ਕਰਕੇ Profile Guided Optimization (PGO) ਸਮਰੱਥ ਕਰੋ (ਮੂਲ ਰੂਪ ਵਿੱਚ ਅਸਮਰੱਥ)।

PGO ਲਈ Clang C compiler ਨੂੰ llvm-profdata ਪ੍ਰੋਗਰਾਮ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ। macOS 'ਤੇ GCC ਨੂੰ ਵੀ ਇਸਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ, ਕਿਉਂਕਿ macOS 'ਤੇ GCC ਅਸਲ ਵਿੱਚ Clang ਦਾ ਹੀ alias ਹੈ।

ਜੇ --enable-shared ਅਤੇ GCC ਵਰਤੇ ਜਾ ਰਹੇ ਹੋਣ, ਤਾਂ libpython ਵਿੱਚ semantic interposition ਵੀ ਅਸਮਰੱਥ ਕਰੋ: compiler ਅਤੇ linker flags ਵਿੱਚ -fno-semantic-interposition ਸ਼ਾਮਲ ਕਰੋ।

Note

Build ਦੌਰਾਨ ਤੁਹਾਨੂੰ ਕੁਝ source files ਲਈ profile data ਉਪਲਬਧ ਨਾ ਹੋਣ ਸੰਬੰਧੀ compiler warnings ਮਿਲ ਸਕਦੀਆਂ ਹਨ। ਇਹ warnings ਨੁਕਸਾਨਦੇਹ ਨਹੀਂ ਹਨ, ਕਿਉਂਕਿ profile data ਇਕੱਠਾ ਕਰਨ ਦੌਰਾਨ ਕੇਵਲ ਕੋਡ ਦਾ ਇੱਕ ਹਿੱਸਾ ਹੀ ਚਲਾਇਆ ਜਾਂਦਾ ਹੈ। Clang 'ਤੇ ਇਹ warnings ਬੰਦ ਕਰਨ ਲਈ CFLAGS ਵਿੱਚ -Wno-profile-instr-unprofiled ਸ਼ਾਮਲ ਕਰੋ।

Added in version 3.6.

Changed in version 3.10: GCC ਨਾਲ -fno-semantic-interposition ਵਰਤੋ।

PROFILE_TASK

Makefile ਵਿੱਚ ਵਰਤੀ ਜਾਣ ਵਾਲੀ environment variable: PGO generation task ਲਈ Python command line arguments।

ਮੂਲ: -m test --pgo --timeout=$(TESTTIMEOUT)।

Added in version 3.8.

Changed in version 3.13: ਹੁਣ task ਦੀ ਅਸਫਲਤਾ ਨੂੰ ਚੁੱਪਚਾਪ ਅਣਡਿੱਠਾ ਨਹੀਂ ਕੀਤਾ ਜਾਂਦਾ।

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

ਕਿਸੇ ਵੀ build ਵਿੱਚ Link Time Optimization (LTO) ਸਮਰੱਥ ਕਰੋ (ਮੂਲ ਰੂਪ ਵਿੱਚ ਅਸਮਰੱਥ)।

Clang C compiler ਨੂੰ LTO ਲਈ llvm-ar (macOS 'ਤੇ ar) ਅਤੇ LTO-ਸਮਰੱਥ linker (ld.gold ਜਾਂ lld) ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ।

Added in version 3.6.

Added in version 3.11: ThinLTO ਵਿਸ਼ੇਸ਼ਤਾ ਵਰਤਣ ਲਈ Clang ਨਾਲ --with-lto=thin ਵਰਤੋ।

Changed in version 3.12: ਜੇ compiler ਇਸ flag ਨੂੰ ਸਵੀਕਾਰ ਕਰਦਾ ਹੈ, ਤਾਂ Clang 'ਤੇ ThinLTO ਨੂੰ ਮੂਲ optimization ਨੀਤੀ ਵਜੋਂ ਵਰਤੋ।

--enable-bolt

BOLT post-link binary optimizer ਦੀ ਵਰਤੋਂ ਸਮਰੱਥ ਕਰੋ (ਮੂਲ ਰੂਪ ਵਿੱਚ ਅਸਮਰੱਥ)।

BOLT, LLVM ਪ੍ਰੋਜੈਕਟ ਦਾ ਹਿੱਸਾ ਹੈ, ਪਰ ਇਹ ਹਮੇਸ਼ਾਂ ਉਨ੍ਹਾਂ ਦੀਆਂ binary distributions ਵਿੱਚ ਸ਼ਾਮਲ ਨਹੀਂ ਹੁੰਦਾ। ਇਸ flag ਲਈ llvm-bolt ਅਤੇ merge-fdata ਉਪਲਬਧ ਹੋਣ ਲਾਜ਼ਮੀ ਹਨ।

BOLT ਅਜੇ ਵੀ ਕਾਫ਼ੀ ਨਵਾਂ ਪ੍ਰੋਜੈਕਟ ਹੈ, ਇਸ ਲਈ ਇਸ flag ਨੂੰ ਇਸ ਵੇਲੇ ਪ੍ਰਯੋਗਾਤਮਕ ਮੰਨਿਆ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ। ਕਿਉਂਕਿ ਇਹ ਟੂਲ machine code 'ਤੇ ਕੰਮ ਕਰਦਾ ਹੈ, ਇਸਦੀ ਸਫਲਤਾ build environment, ਹੋਰ optimization configure arguments ਅਤੇ CPU architecture ਦੇ ਮਿਲਾਪ 'ਤੇ ਨਿਰਭਰ ਕਰਦੀ ਹੈ, ਅਤੇ ਹਰ ਮਿਲਾਪ ਸਮਰਥਿਤ ਨਹੀਂ ਹੁੰਦਾ। LLVM 16 ਤੋਂ ਪਹਿਲਾਂ ਦੇ BOLT ਸੰਸਕਰਣ ਕੁਝ ਸਥਿਤੀਆਂ ਵਿੱਚ crash ਹੋਣ ਲਈ ਜਾਣੇ ਜਾਂਦੇ ਹਨ। BOLT optimization ਲਈ LLVM 16 ਜਾਂ ਇਸ ਤੋਂ ਨਵਾਂ ਸੰਸਕਰਣ ਵਰਤਣ ਦੀ ਪੂਰੀ ਸਿਫ਼ਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ।

configure ਦੇ BOLT_INSTRUMENT_FLAGS ਅਤੇ BOLT_APPLY_FLAGS variables ਨੂੰ ਪਰਿਭਾਸ਼ਿਤ ਕਰਕੇ ਕ੍ਰਮਵਾਰ llvm-bolt ਲਈ binaries ਨੂੰ instrument ਕਰਨ ਅਤੇ BOLT data ਲਾਗੂ ਕਰਨ ਵਾਸਤੇ ਮੂਲ arguments ਨੂੰ override ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ।

Added in version 3.12.

BOLT_APPLY_FLAGS

BOLT optimized binary ਬਣਾਉਂਦੇ ਸਮੇਂ llvm-bolt ਨੂੰ ਦਿੱਤੇ ਜਾਣ ਵਾਲੇ arguments।

Added in version 3.12.

BOLT_INSTRUMENT_FLAGS

Binaries ਨੂੰ instrument ਕਰਨ ਸਮੇਂ llvm-bolt ਨੂੰ ਦਿੱਤੇ ਜਾਣ ਵਾਲੇ arguments।

Added in version 3.12.

--with-computed-gotos

Evaluation loop ਵਿੱਚ computed gotos ਸਮਰੱਥ ਕਰੋ (ਸਮਰਥਿਤ compilers 'ਤੇ ਮੂਲ ਰੂਪ ਵਿੱਚ ਸਮਰੱਥ)।

--with-tail-call-interp

CPython ਵਿੱਚ tail calls ਵਰਤਣ ਵਾਲੇ interpreters ਨੂੰ ਸਮਰੱਥ ਕਰੋ। ਜੇ ਇਹ ਸਮਰੱਥ ਕੀਤਾ ਗਿਆ ਹੈ, ਤਾਂ PGO (--enable-optimizations) ਨੂੰ ਸਮਰੱਥ ਕਰਨਾ ਬਹੁਤ ਜ਼ਿਆਦਾ ਸਿਫ਼ਾਰਸ਼ੀ ਹੈ। ਇਸ ਵਿਕਲਪ ਲਈ ਅਜਿਹਾ C compiler ਲੋੜੀਂਦਾ ਹੈ ਜੋ tail calls ਦਾ ਸਹੀ ਸਮਰਥਨ ਕਰਦਾ ਹੋਵੇ ਅਤੇ preserve_none calling convention ਨੂੰ ਸਮਰਥਨ ਦਿੰਦਾ ਹੋਵੇ। ਉਦਾਹਰਨ ਲਈ, Clang 19 ਅਤੇ ਇਸ ਤੋਂ ਬਾਅਦ ਦੇ ਸੰਸਕਰਣ ਇਹ ਵਿਸ਼ੇਸ਼ਤਾ ਸਮਰਥਨ ਕਰਦੇ ਹਨ।

Added in version 3.14.

--without-frame-pointers

Frame pointers ਨੂੰ ਅਸਮਰੱਥ ਕਰੋ, ਜੋ ਮੂਲ ਰੂਪ ਵਿੱਚ ਸਮਰੱਥ ਹੁੰਦੇ ਹਨ (PEP 831 ਵੇਖੋ)।

ਮੂਲ ਰੂਪ ਵਿੱਚ build, BASECFLAGS ਵਿੱਚ frame ਜਾਂ backchain pointers ਬਣਾਉਣ ਲਈ flags ਜੋੜਦੀ ਹੈ:

  • ਜੇ compiler ਸਮਰਥਨ ਕਰਦਾ ਹੋਵੇ, ਤਾਂ -fno-omit-frame-pointer ਅਤੇ/ਜਾਂ -mno-omit-leaf-frame-pointer ਜੋੜੇ ਜਾਂਦੇ ਹਨ।

  • ਜੇ ਸਮਰਥਿਤ ਹੋਵੇ, ਤਾਂ 32-bit ARM 'ਤੇ -marm ਅਤੇ/ਜਾਂ -mno-thumb ਜੋੜੇ ਜਾਂਦੇ ਹਨ।

  • s390x ਪਲੇਟਫਾਰਮਾਂ 'ਤੇ, ਜੇ ਸਮਰਥਿਤ ਹੋਵੇ, ਤਾਂ ਉਪਰੋਕਤ frame pointer flags ਦੀ ਥਾਂ -mbackchain ਜੋੜਿਆ ਜਾਂਦਾ ਹੈ।

  • ppc64le ਪਲੇਟਫਾਰਮਾਂ 'ਤੇ ਕਿਸੇ compiler flag ਦੀ ਲੋੜ ਨਹੀਂ ਹੁੰਦੀ, ਕਿਉਂਕਿ Power ABI ਮੂਲ ਰੂਪ ਵਿੱਚ compilers ਨੂੰ back chain ਬਣਾਈ ਰੱਖਣ ਲਈ ਬਾਧਿਤ ਕਰਦਾ ਹੈ।

Frame pointers, profilers, debuggers ਅਤੇ system tracing tools (perf, eBPF, dtrace, gdb) ਨੂੰ DWARF metadata ਤੋਂ ਬਿਨਾਂ C call stack ਨੂੰ ਟ੍ਰੇਸ ਕਰਨ ਯੋਗ ਬਣਾਉਂਦੇ ਹਨ। ਇਹ flags sysconfig ਰਾਹੀਂ third-party C extensions ਤੱਕ ਵੀ ਪਹੁੰਚ ਜਾਂਦੇ ਹਨ। ਜਿਹੜੇ compilers ਇਹਨਾਂ ਨੂੰ ਨਹੀਂ ਸਮਝਦੇ, ਉਨ੍ਹਾਂ ਵਿੱਚ build ਇਹਨਾਂ ਨੂੰ ਚੁੱਪਚਾਪ ਛੱਡ ਦਿੰਦੀ ਹੈ।

Downstream packagers ਅਤੇ custom build systems ਨਾਲ ਬਣੀਆਂ native libraries ਦੇ ਲੇਖਕਾਂ ਨੂੰ ਵੀ ਇਹੀ flags ਵਰਤਣੀਆਂ ਚਾਹੀਦੀਆਂ ਹਨ, ਤਾਂ ਜੋ ਸਾਰੇ native frames ਵਿੱਚ unwind chain ਅਟੁੱਟ ਰਹੇ।

Added in version 3.15.

--without-mimalloc

ਤੇਜ਼ mimalloc allocator ਨੂੰ ਅਸਮਰੱਥ ਕਰੋ (ਮੂਲ ਰੂਪ ਵਿੱਚ ਸਮਰੱਥ)।

ਇਹ ਵਿਕਲਪ --disable-gil ਨਾਲ ਇਕੱਠੇ ਨਹੀਂ ਵਰਤਿਆ ਜਾ ਸਕਦਾ, ਕਿਉਂਕਿ free-threaded build ਲਈ mimalloc ਲਾਜ਼ਮੀ ਹੈ।

PYTHONMALLOC environment variable ਵੀ ਵੇਖੋ।

--without-pymalloc

ਵਿਸ਼ੇਸ਼ Python memory allocator pymalloc ਨੂੰ ਅਸਮਰੱਥ ਕਰੋ (ਮੂਲ ਰੂਪ ਵਿੱਚ ਸਮਰੱਥ)।

PYTHONMALLOC environment variable ਵੀ ਵੇਖੋ।

--with-pymalloc-hugepages

pymalloc arenas ਲਈ huge page ਸਮਰਥਨ ਸਮਰੱਥ ਕਰੋ (ਮੂਲ ਰੂਪ ਵਿੱਚ ਅਸਮਰੱਥ)। ਸਮਰੱਥ ਹੋਣ 'ਤੇ, 64-bit ਪਲੇਟਫਾਰਮਾਂ 'ਤੇ arena ਦਾ ਆਕਾਰ 2 MiB ਕਰ ਦਿੱਤਾ ਜਾਂਦਾ ਹੈ ਅਤੇ arena allocation MAP_HUGETLB (Linux) ਜਾਂ MEM_LARGE_PAGES (Windows) ਦੀ ਵਰਤੋਂ ਕਰਦੀ ਹੈ, ਅਤੇ ਲੋੜ ਪੈਣ 'ਤੇ ਆਮ pages 'ਤੇ ਆਪਣੇ ਆਪ ਵਾਪਸ ਆ ਜਾਂਦੀ ਹੈ।

ਭਾਵੇਂ ਇਹ ਵਿਕਲਪ ਨਾਲ compile ਕੀਤਾ ਗਿਆ ਹੋਵੇ, huge pages ਰਨਟਾਈਮ ਦੌਰਾਨ ਤਦ ਤੱਕ ਨਹੀਂ ਵਰਤੀਆਂ ਜਾਂਦੀਆਂ ਜਦ ਤੱਕ PYTHON_PYMALLOC_HUGEPAGES environment variable ਨੂੰ 1 ਨਾ ਸੈੱਟ ਕੀਤਾ ਜਾਵੇ। ਇਹ opt-in ਇਸ ਲਈ ਲਾਜ਼ਮੀ ਹੈ ਕਿਉਂਕਿ Linux 'ਤੇ huge pages ਨਾਲ ਕੁਝ ਜੋਖਮ ਹੁੰਦੇ ਹਨ।

  • Linux 'ਤੇ, ਜੇ huge-page pool ਖਤਮ ਹੋ ਜਾਵੇ, ਤਾਂ page faults (ਜਿਨ੍ਹਾਂ ਵਿੱਚ os.fork() ਤੋਂ ਬਾਅਦ copy-on-write faults ਵੀ ਸ਼ਾਮਲ ਹਨ) SIGBUS ਭੇਜਦੇ ਹਨ ਅਤੇ process ਨੂੰ ਸਮਾਪਤ ਕਰ ਦਿੰਦੇ ਹਨ।

  • Windows 'ਤੇ large pages ਵਰਤਣ ਲਈ ਇੱਕ ਵਿਸ਼ੇਸ਼ privilege ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ। ਵੇਰਵਿਆਂ ਲਈ Windows documentation for large pages ਵੇਖੋ। ਜੇ ਵਰਤੋਂਕਾਰ ਕੋਲ ਲੋੜੀਂਦਾ SeLockMemoryPrivilege privilege ਨਹੀਂ ਹੈ, ਤਾਂ Python ਸ਼ੁਰੂ ਹੋਣ ਸਮੇਂ ਅਸਫਲ ਹੋ ਜਾਵੇਗਾ।

configure script ਜਾਂਚਦੀ ਹੈ ਕਿ ਪਲੇਟਫਾਰਮ MAP_HUGETLB ਦਾ ਸਮਰਥਨ ਕਰਦਾ ਹੈ ਜਾਂ ਨਹੀਂ, ਅਤੇ ਜੇ ਇਹ ਉਪਲਬਧ ਨਾ ਹੋਵੇ ਤਾਂ ਇੱਕ ਚੇਤਾਵਨੀ ਜਾਰੀ ਕਰਦੀ ਹੈ।

Windows 'ਤੇ build.bat ਨਾਲ --pymalloc-hugepages flag ਵਰਤੋ ਜਾਂ UsePymallocHugepages MSBuild property ਸੈੱਟ ਕਰੋ।

Added in version 3.15.

--without-doc-strings

ਮੈਮੋਰੀ ਦੀ ਵਰਤੋਂ ਘਟਾਉਣ ਲਈ static documentation strings ਨੂੰ ਅਸਮਰੱਥ ਕਰੋ (ਮੂਲ ਰੂਪ ਵਿੱਚ ਸਮਰੱਥ)। Python ਵਿੱਚ ਪਰਿਭਾਸ਼ਿਤ documentation strings ਇਸ ਨਾਲ ਪ੍ਰਭਾਵਿਤ ਨਹੀਂ ਹੁੰਦੀਆਂ।

Don't define the WITH_DOC_STRINGS macro.

WITH_DOC_STRINGS

Define this macro to include static documentation strings in the build. It is defined by default, unless --without-doc-strings is used.

PyDoc_STRVAR() macro ਵੇਖੋ।

--enable-profiling

gprof ਨਾਲ C-ਪੱਧਰੀ code profiling ਸਮਰੱਥ ਕਰੋ (ਮੂਲ ਰੂਪ ਵਿੱਚ ਅਸਮਰੱਥ)।

--with-strict-overflow

C compiler flags ਵਿੱਚ -fstrict-overflow ਜੋੜੋ (ਮੂਲ ਰੂਪ ਵਿੱਚ ਅਸੀਂ ਇਸਦੀ ਥਾਂ -fno-strict-overflow ਜੋੜਦੇ ਹਾਂ)।

--without-remote-debug

PEP 768 ਵਿੱਚ ਵਰਣਿਤ remote debugging ਸਮਰਥਨ ਨੂੰ ਅਸਮਰੱਥ ਕਰੋ (ਮੂਲ ਰੂਪ ਵਿੱਚ ਸਮਰੱਥ)। ਜਦੋਂ ਇਹ flag ਦਿੱਤਾ ਜਾਂਦਾ ਹੈ, ਤਾਂ ਉਹ code compile ਨਹੀਂ ਕੀਤਾ ਜਾਂਦਾ ਜੋ interpreter ਨੂੰ PEP 768 ਅਨੁਸਾਰ ਵੱਖਰੀ process ਵਿੱਚ Python ਫ਼ਾਈਲ ਚਲਾਉਣ ਦੀ ਯੋਜਨਾ ਬਣਾਉਣ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ। ਇਸ ਵਿੱਚ code ਨੂੰ ਚਲਾਉਣ ਲਈ schedule ਕਰਨ ਅਤੇ ਚਲਾਉਣ ਲਈ code ਪ੍ਰਾਪਤ ਕਰਨ—ਦੋਵੇਂ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਸ਼ਾਮਲ ਹਨ।

Py_REMOTE_DEBUG

ਇਹ macro ਮੂਲ ਰੂਪ ਵਿੱਚ ਪਰਿਭਾਸ਼ਿਤ ਹੁੰਦੀ ਹੈ, ਜਦ ਤੱਕ Python ਨੂੰ --without-remote-debug ਨਾਲ configure ਨਾ ਕੀਤਾ ਗਿਆ ਹੋਵੇ।

ਧਿਆਨ ਰੱਖੋ ਕਿ ਭਾਵੇਂ ਇਹ macro ਪਰਿਭਾਸ਼ਿਤ ਹੋਵੇ, ਫਿਰ ਵੀ remote debugging ਉਪਲਬਧ ਨਾ ਹੋ ਸਕਦੀ ਹੈ (ਉਦਾਹਰਨ ਲਈ, ਕਿਸੇ ਅਣਅਨੁਕੂਲ ਪਲੇਟਫਾਰਮ 'ਤੇ)।

Added in version 3.14.

3.3.8. Python Debug Build

Debug build ਉਹ Python build ਹੈ ਜੋ --with-pydebug configure ਵਿਕਲਪ ਨਾਲ ਬਣਾਈ ਗਈ ਹੋਵੇ।

Debug build ਦੇ ਪ੍ਰਭਾਵ:

  • ਮੂਲ ਰੂਪ ਵਿੱਚ ਸਾਰੀਆਂ warnings ਦਿਖਾਓ: warnings ਮੋਡੀਊਲ ਵਿੱਚ ਮੂਲ warning filters ਦੀ ਸੂਚੀ ਖਾਲੀ ਹੁੰਦੀ ਹੈ।

  • sys.abiflags ਵਿੱਚ d ਜੋੜੋ।

  • sys.gettotalrefcount() function ਜੋੜੋ।

  • -X showrefcount command line ਵਿਕਲਪ ਜੋੜੋ।

  • Parser ਨੂੰ debug ਕਰਨ ਲਈ -d command line ਵਿਕਲਪ ਅਤੇ PYTHONDEBUG environment variable ਜੋੜੋ।

  • __lltrace__ variable ਲਈ ਸਮਰਥਨ ਜੋੜੋ: ਜੇ ਇਹ variable ਪਰਿਭਾਸ਼ਿਤ ਹੋਵੇ, ਤਾਂ bytecode evaluation loop ਵਿੱਚ low-level tracing ਸਮਰੱਥ ਕਰੋ।

  • Buffer overflow ਅਤੇ ਹੋਰ memory errors ਦੀ ਪਛਾਣ ਕਰਨ ਲਈ memory allocators ਉੱਤੇ debug hooks ਇੰਸਟਾਲ ਕਰੋ।

  • Py_DEBUG ਅਤੇ Py_REF_DEBUG macros ਪਰਿਭਾਸ਼ਿਤ ਕਰੋ।

  • Runtime checks ਜੋੜੋ: #ifdef Py_DEBUG ਅਤੇ #endif ਨਾਲ ਘਿਰਿਆ code। assert(...) ਅਤੇ _PyObject_ASSERT(...) assertions ਨੂੰ ਸਮਰੱਥ ਕਰੋ: NDEBUG macro ਸੈੱਟ ਨਾ ਕਰੋ (--with-assertions configure ਵਿਕਲਪ ਵੀ ਵੇਖੋ)। ਮੁੱਖ runtime checks:

    • Function arguments ਉੱਤੇ sanity checks ਜੋੜੋ।

    • Unicode ਅਤੇ int objects ਬਣਾਉਂਦੇ ਸਮੇਂ ਉਨ੍ਹਾਂ ਦੀ memory ਨੂੰ ਇੱਕ pattern ਨਾਲ ਭਰਿਆ ਜਾਂਦਾ ਹੈ ਤਾਂ ਜੋ uninitialized objects ਦੀ ਵਰਤੋਂ ਦਾ ਪਤਾ ਲੱਗ ਸਕੇ।

    • ਯਕੀਨੀ ਬਣਾਓ ਕਿ ਉਹ functions ਜੋ ਮੌਜੂਦਾ exception ਨੂੰ ਸਾਫ਼ ਜਾਂ ਬਦਲ ਸਕਦੀਆਂ ਹਨ, ਕਿਸੇ exception ਦੇ ਉੱਠੇ ਹੋਏ ਹੋਣ ਦੀ ਸਥਿਤੀ ਵਿੱਚ ਨਾ ਬੁਲਾਈਆਂ ਜਾਣ।

    • ਜਾਂਚੋ ਕਿ deallocator functions ਮੌਜੂਦਾ exception ਨੂੰ ਨਹੀਂ ਬਦਲਦੀਆਂ।

    • Garbage collector (gc.collect() function) objects ਦੀ ਇਕਸਾਰਤਾ ਉੱਤੇ ਕੁਝ ਬੁਨਿਆਦੀ ਜਾਂਚਾਂ ਕਰਦਾ ਹੈ।

    • Py_SAFE_DOWNCAST() macro, ਵੱਡੀਆਂ ਕਿਸਮਾਂ ਤੋਂ ਛੋਟੀਆਂ ਕਿਸਮਾਂ ਵਿੱਚ downcast ਕਰਦੇ ਸਮੇਂ integer underflow ਅਤੇ overflow ਦੀ ਜਾਂਚ ਕਰਦੀ ਹੈ।

Python Development Mode ਅਤੇ --with-trace-refs configure ਵਿਕਲਪ ਵੀ ਵੇਖੋ।

Changed in version 3.8: ਹੁਣ release builds, debug builds ਨਾਲ ABI-ਅਨੁਕੂਲ ਹਨ: Py_DEBUG macro ਨੂੰ ਪਰਿਭਾਸ਼ਿਤ ਕਰਨ ਨਾਲ ਹੁਣ Py_TRACE_REFS macro ਆਪੇ ਪਰਿਭਾਸ਼ਿਤ ਨਹੀਂ ਹੁੰਦੀ (--with-trace-refs ਵਿਕਲਪ ਵੇਖੋ)। ਹਾਲਾਂਕਿ, debug builds ਅਜੇ ਵੀ release builds ਨਾਲੋਂ ਵੱਧ symbols ਪ੍ਰਦਾਨ ਕਰਦੀਆਂ ਹਨ, ਅਤੇ debug build ਦੇ ਵਿਰੁੱਧ ਬਣਾਇਆ ਗਿਆ code ਲਾਜ਼ਮੀ ਨਹੀਂ ਕਿ release build ਨਾਲ ਅਨੁਕੂਲ ਹੋਵੇ।

3.3.9. Debug ਵਿਕਲਪ

--with-pydebug

Python ਨੂੰ debug mode ਵਿੱਚ ਬਣਾਓ: Py_DEBUG macro ਪਰਿਭਾਸ਼ਿਤ ਕਰੋ (ਮੂਲ ਰੂਪ ਵਿੱਚ ਅਸਮਰੱਥ)।

--with-trace-refs

Debugging ਦੇ ਉਦੇਸ਼ ਲਈ tracing references ਸਮਰੱਥ ਕਰੋ (ਮੂਲ ਰੂਪ ਵਿੱਚ ਅਸਮਰੱਥ)।

ਅਸਰ:

  • Py_TRACE_REFS macro ਪਰਿਭਾਸ਼ਿਤ ਕਰੋ।

  • sys.getobjects() function ਜੋੜੋ।

  • PYTHONDUMPREFS environment variable ਜੋੜੋ।

Python ਬੰਦ ਹੋਣ ਸਮੇਂ ਹਾਲੇ ਵੀ ਮੌਜੂਦ objects ਅਤੇ ਉਨ੍ਹਾਂ ਦੇ reference counts ਨੂੰ dump ਕਰਨ ਲਈ PYTHONDUMPREFS environment variable ਵਰਤੀ ਜਾ ਸਕਦੀ ਹੈ।

Statically allocated objects ਨੂੰ trace ਨਹੀਂ ਕੀਤਾ ਜਾਂਦਾ।

Added in version 3.8.

Changed in version 3.13: ਇਹ build ਹੁਣ release build ਅਤੇ debug build ਦੋਵਾਂ ਨਾਲ ABI-ਅਨੁਕੂਲ ਹੈ।

--with-assertions

C assertions ਸਮਰੱਥ ਕਰਕੇ build ਕਰੋ (ਮੂਲ ਰੂਪ ਵਿੱਚ ਨਹੀਂ): assert(...); ਅਤੇ _PyObject_ASSERT(...);।

ਜੇ ਇਹ ਸੈੱਟ ਕੀਤਾ ਗਿਆ ਹੋਵੇ, ਤਾਂ NDEBUG macro ਨੂੰ OPT compiler variable ਵਿੱਚ ਪਰਿਭਾਸ਼ਿਤ ਨਹੀਂ ਕੀਤਾ ਜਾਂਦਾ।

--with-pydebug ਵਿਕਲਪ (debug build) ਵੀ ਵੇਖੋ, ਜੋ assertions ਨੂੰ ਵੀ ਸਮਰੱਥ ਕਰਦਾ ਹੈ।

Added in version 3.6.

--with-valgrind

Valgrind ਸਮਰਥਨ ਸਮਰੱਥ ਕਰੋ (ਮੂਲ ਰੂਪ ਵਿੱਚ ਨਹੀਂ)।

--with-dtrace

DTrace ਸਮਰਥਨ ਸਮਰੱਥ ਕਰੋ (ਮੂਲ ਰੂਪ ਵਿੱਚ ਨਹੀਂ)।

Instrumenting CPython with DTrace and SystemTap ਵੇਖੋ।

Added in version 3.6.

--with-address-sanitizer

AddressSanitizer memory error detector, asan, ਨੂੰ ਸਮਰੱਥ ਕਰੋ (ਮੂਲ ਰੂਪ ਵਿੱਚ ਨਹੀਂ)। ASan ਦੀ ਪਛਾਣ ਸਮਰੱਥਾ ਨੂੰ ਹੋਰ ਵਧੀਆ ਬਣਾਉਣ ਲਈ ਤੁਸੀਂ --without-pymalloc ਨਾਲ ਇਸਨੂੰ ਜੋੜਨਾ ਚਾਹੋਗੇ, ਤਾਂ ਜੋ ਉਹ ਵਿਸ਼ੇਸ਼ small-object allocator ਅਸਮਰੱਥ ਹੋ ਜਾਵੇ ਜਿਸ ਦੀਆਂ allocations ਨੂੰ ASan track ਨਹੀਂ ਕਰਦਾ।

Added in version 3.6.

--with-memory-sanitizer

MemorySanitizer allocation error detector, msan, ਨੂੰ ਸਮਰੱਥ ਕਰੋ (ਮੂਲ ਰੂਪ ਵਿੱਚ ਨਹੀਂ)।

MSan reports false positives for memory initialized by libraries that are not built with MSan, so either build all dependencies with MSan or disable the extension modules that use them in Modules/Setup.local.

Added in version 3.6.

--with-undefined-behavior-sanitizer

UndefinedBehaviorSanitizer undefined behaviour detector, ubsan, ਨੂੰ ਸਮਰੱਥ ਕਰੋ (ਮੂਲ ਰੂਪ ਵਿੱਚ ਨਹੀਂ)।

Added in version 3.6.

--with-thread-sanitizer

ThreadSanitizer data race detector, tsan, ਨੂੰ ਸਮਰੱਥ ਕਰੋ (ਮੂਲ ਰੂਪ ਵਿੱਚ ਨਹੀਂ)।

Added in version 3.13.

3.3.10. Linker ਦੇ ਵਿਕਲਪ

--enable-shared

Shared Python library libpython ਬਣਾਉਣ ਨੂੰ ਸਮਰੱਥ ਕਰੋ (ਮੂਲ ਰੂਪ ਵਿੱਚ ਨਹੀਂ)।

--without-static-libpython

libpythonMAJOR.MINOR.a ਨਾ ਬਣਾਓ ਅਤੇ python.o ਇੰਸਟਾਲ ਨਾ ਕਰੋ (ਮੂਲ ਰੂਪ ਵਿੱਚ ਬਣਾਇਆ ਅਤੇ ਸਮਰੱਥ ਕੀਤਾ ਜਾਂਦਾ ਹੈ)।

Added in version 3.10.

--enable-static-libpython-for-interpreter

Python interpreter binary (python3) ਨੂੰ shared Python library ਨਾਲ link ਨਾ ਕਰੋ; ਇਸਦੀ ਬਜਾਏ interpreter ਨੂੰ libpython ਨਾਲ statically link ਕਰੋ, ਜਿਵੇਂ ਕਿ --enable-shared ਵਰਤਿਆ ਹੀ ਨਾ ਗਿਆ ਹੋਵੇ, ਪਰ shared libpython ਨੂੰ ਬਣਾਉਣਾ ਜਾਰੀ ਰੱਖੋ (ਹੋਰ ਪ੍ਰੋਗਰਾਮਾਂ ਦੁਆਰਾ ਵਰਤੋਂ ਲਈ)।

ਜੇ --enable-shared ਵਰਤਿਆ ਨਹੀਂ ਗਿਆ, ਤਾਂ ਇਸ ਵਿਕਲਪ ਦਾ ਕੋਈ ਅਸਰ ਨਹੀਂ ਹੁੰਦਾ।

ਮੂਲ ਰੂਪ ਵਿੱਚ (ਜਦੋਂ -enable-shared ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ), Python interpreter ਨੂੰ ਬਣੀ ਹੋਈ shared library ਨਾਲ link ਕੀਤਾ ਜਾਂਦਾ ਹੈ।

Added in version 3.15.

3.3.11. Libraries ਦੇ ਵਿਕਲਪ

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

ਵਾਧੂ libraries ਨਾਲ link ਕਰੋ (ਮੂਲ ਰੂਪ ਵਿੱਚ ਨਹੀਂ)।

--with-system-expat

ਇੰਸਟਾਲ ਕੀਤੀ ਹੋਈ expat library ਦੀ ਵਰਤੋਂ ਕਰਕੇ pyexpat ਮੋਡੀਊਲ ਬਣਾਓ (ਮੂਲ ਰੂਪ ਵਿੱਚ ਨਹੀਂ)।

--with-system-libmpdec

ਇੰਸਟਾਲ ਕੀਤੀ ਹੋਈ mpdecimal library ਦੀ ਵਰਤੋਂ ਕਰਕੇ _decimal extension module ਬਣਾਓ; decimal ਮੋਡੀਊਲ ਵੇਖੋ (ਮੂਲ ਰੂਪ ਵਿੱਚ ਹਾਂ)।

Added in version 3.3.

Changed in version 3.13: ਮੂਲ ਰੂਪ ਵਿੱਚ ਇੰਸਟਾਲ ਕੀਤੀ ਹੋਈ mpdecimal library ਦੀ ਵਰਤੋਂ ਕਰੋ।

Changed in version 3.15: ਜੇ ਇੰਸਟਾਲ ਕੀਤੀ ਹੋਈ mpdecimal library ਨਾ ਮਿਲੇ, ਤਾਂ bundled library ਦੀ ਨਕਲ ਹੁਣ ਆਪਣੇ ਆਪ ਨਹੀਂ ਚੁਣੀ ਜਾਵੇਗੀ। ਕੇਵਲ Python 3.15 ਵਿੱਚ ਹੀ ਇਸਨੂੰ --with-system-libmpdec=no ਜਾਂ --without-system-libmpdec ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਸਪਸ਼ਟ ਤੌਰ 'ਤੇ ਚੁਣਿਆ ਜਾ ਸਕਦਾ ਹੈ।

Deprecated since version 3.13, will be removed in version 3.16: mpdecimal library ਦੇ source code ਦੀ ਇੱਕ ਨਕਲ ਹੁਣ Python 3.16 ਨਾਲ ਵੰਡ ਕੇ ਨਹੀਂ ਦਿੱਤੀ ਜਾਵੇਗੀ।

See also

LIBMPDEC_CFLAGS ਅਤੇ LIBMPDEC_LIBS।

--with-readline=readline|editline

readline ਮੋਡੀਊਲ ਲਈ backend library ਨਿਰਧਾਰਤ ਕਰੋ।

  • readline: backend ਵਜੋਂ readline ਦੀ ਵਰਤੋਂ ਕਰੋ।

  • editline: backend ਵਜੋਂ editline ਦੀ ਵਰਤੋਂ ਕਰੋ।

Added in version 3.10.

--without-readline

readline ਮੋਡੀਊਲ ਨਾ ਬਣਾਓ (ਮੂਲ ਰੂਪ ਵਿੱਚ ਬਣਾਇਆ ਜਾਂਦਾ ਹੈ)।

HAVE_LIBREADLINE macro ਨੂੰ ਪਰਿਭਾਸ਼ਿਤ ਨਾ ਕਰੋ।

Added in version 3.10.

--with-libm=STRING

libm ਗਣਿਤ library ਨੂੰ STRING ਨਾਲ override ਕਰੋ (ਮੂਲ ਰੂਪ ਵਿੱਚ ਇਹ ਸਿਸਟਮ-ਨਿਰਭਰ ਹੁੰਦੀ ਹੈ)।

--with-libc=STRING

libc C library ਨੂੰ STRING ਨਾਲ override ਕਰੋ (ਮੂਲ ਰੂਪ ਵਿੱਚ ਇਹ ਸਿਸਟਮ-ਨਿਰਭਰ ਹੁੰਦੀ ਹੈ)।

--with-openssl=DIR

OpenSSL directory ਦਾ root।

Added in version 3.7.

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

OpenSSL libraries ਲਈ runtime library directory (rpath) ਸੈੱਟ ਕਰੋ:

  • no (ਮੂਲ): rpath ਸੈੱਟ ਨਾ ਕਰੋ।

  • auto: --with-openssl ਅਤੇ pkg-config ਤੋਂ rpath ਆਪਣੇ ਆਪ ਪਤਾ ਲਗਾਓ।

  • DIR: ਇੱਕ ਸਪਸ਼ਟ rpath ਸੈੱਟ ਕਰੋ।

Added in version 3.10.

3.3.12. ਸੁਰੱਖਿਆ ਵਿਕਲਪ

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

Python/pyhash.c ਵਿੱਚ ਵਰਤੋਂ ਲਈ hash algorithm ਚੁਣੋ:

  • siphash13 (ਮੂਲ);

  • siphash24;

  • fnv.

Added in version 3.4.

Added in version 3.11: siphash13 ਸ਼ਾਮਲ ਕੀਤਾ ਗਿਆ ਹੈ ਅਤੇ ਹੁਣ ਇਹ ਮੂਲ algorithm ਹੈ।

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

ਅੰਦਰੂਨੀ hash modules:

  • md5;

  • sha1;

  • sha256;

  • sha512;

  • sha3 (shake ਸਮੇਤ);

  • blake2

Added in version 3.9.

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

OpenSSL ਦੀ ਮੂਲ cipher suites string ਨੂੰ override ਕਰੋ:

  • python (ਮੂਲ): Python ਦੀ ਪਸੰਦੀਦਾ ਚੋਣ ਵਰਤੋ।

  • openssl: OpenSSL ਦੀਆਂ ਮੂਲ settings ਨੂੰ ਬਿਨਾਂ ਬਦਲੇ ਰਹਿਣ ਦਿਓ।

  • STRING: ਆਪਣੀ ਮਨਚਾਹੀ string ਵਰਤੋ।

ssl ਮੋਡੀਊਲ ਵੇਖੋ।

Added in version 3.7.

Changed in version 3.10: python ਅਤੇ STRING ਦੋਵੇਂ settings TLS 1.2 ਨੂੰ ਘੱਟੋ-ਘੱਟ protocol version ਵਜੋਂ ਵੀ ਸੈੱਟ ਕਰਦੀਆਂ ਹਨ।

--disable-safety

ਸੁਰੱਖਿਆ ਕਾਰਨਾਂ ਕਰਕੇ ਬਿਨਾਂ ਕਿਸੇ ਕਾਰਗੁਜ਼ਾਰੀ ਓਵਰਹੈੱਡ ਦੇ ਉਹਨਾਂ ਕੰਪਾਈਲਰ ਵਿਕਲਪਾਂ ਨੂੰ ਅਯੋਗ ਕਰੋ ਜੋ recommended by OpenSSF ਹਨ। ਜੇ ਇਹ ਵਿਕਲਪ ਚਾਲੂ ਨਹੀਂ ਕੀਤਾ ਗਿਆ, ਤਾਂ CPython ਸੁਰੱਖਿਆ ਕੰਪਾਈਲਰ ਵਿਕਲਪਾਂ ਦੇ ਆਧਾਰ 'ਤੇ ਬਿਨਾਂ ਕਿਸੇ ਕਾਰਗੁਜ਼ਾਰੀ ਘਾਟ ਦੇ ਬਣਾਇਆ ਜਾਵੇਗਾ। ਜਦੋਂ ਇਹ ਵਿਕਲਪ ਚਾਲੂ ਕੀਤਾ ਜਾਂਦਾ ਹੈ, ਤਾਂ CPython ਹੇਠਾਂ ਦਿੱਤੇ ਕੰਪਾਈਲਰ ਵਿਕਲਪਾਂ ਨਾਲ ਨਹੀਂ ਬਣਾਇਆ ਜਾਵੇਗਾ।

--disable-safety ਨਾਲ ਹੇਠ ਲਿਖੇ compiler options ਅਸਮਰੱਥ ਕੀਤੇ ਜਾਂਦੇ ਹਨ:

  • -fstack-protector-strong: stack-ਅਧਾਰਿਤ buffer overflow ਲਈ runtime checks ਸਮਰੱਥ ਕਰਦਾ ਹੈ।

  • -Wtrampolines: ਉਹ trampolines ਜਿਨ੍ਹਾਂ ਨੂੰ executable stack ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ, ਉਨ੍ਹਾਂ ਬਾਰੇ warnings ਸਮਰੱਥ ਕਰਦਾ ਹੈ।

Added in version 3.14.

--enable-slower-safety

ਉਹ compiler options ਸਮਰੱਥ ਕਰੋ ਜੋ ਸੁਰੱਖਿਆ ਕਾਰਨਾਂ ਕਰਕੇ recommended by OpenSSF ਹਨ ਅਤੇ ਜਿਨ੍ਹਾਂ ਨਾਲ ਕੁਝ performance overhead ਆਉਂਦੀ ਹੈ। ਜੇ ਇਹ ਵਿਕਲਪ ਸਮਰੱਥ ਨਾ ਕੀਤਾ ਜਾਵੇ, ਤਾਂ CPython performance ਉੱਤੇ ਪ੍ਰਭਾਵ ਪਾਉਣ ਵਾਲੇ ਸੁਰੱਖਿਆ compiler options ਨਾਲ ਨਹੀਂ ਬਣਾਇਆ ਜਾਵੇਗਾ। ਜੇ ਇਹ ਸਮਰੱਥ ਕੀਤਾ ਜਾਵੇ, ਤਾਂ CPython ਹੇਠਾਂ ਦਿੱਤੇ compiler options ਨਾਲ ਬਣਾਇਆ ਜਾਵੇਗਾ।

--enable-slower-safety ਨਾਲ ਹੇਠ ਲਿਖੇ compiler options ਸਮਰੱਥ ਕੀਤੇ ਜਾਂਦੇ ਹਨ:

  • -D_FORTIFY_SOURCE=3: ਅਸੁਰੱਖਿਅਤ libc ਵਰਤੋਂ ਅਤੇ buffer overflow ਲਈ compile-time ਅਤੇ runtime checks ਨਾਲ source code ਨੂੰ ਮਜ਼ਬੂਤ ਬਣਾਉਂਦਾ ਹੈ।

Added in version 3.14.

3.3.13. macOS ਵਿਕਲਪ

Mac/README.rst ਵੇਖੋ।

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

Universal binary build ਬਣਾਓ। SDKDIR ਦੱਸਦਾ ਹੈ ਕਿ build ਲਈ ਕਿਹੜਾ macOS SDK ਵਰਤਿਆ ਜਾਣਾ ਹੈ (ਮੂਲ ਰੂਪ ਵਿੱਚ ਨਹੀਂ)।

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

ਰਵਾਇਤੀ Unix installation ਦੀ ਬਜਾਏ ਇੱਕ Python.framework ਬਣਾਓ। ਵਿਕਲਪੀ INSTALLDIR installation path ਨਿਰਧਾਰਤ ਕਰਦਾ ਹੈ (ਮੂਲ ਰੂਪ ਵਿੱਚ ਨਹੀਂ)।

--with-universal-archs=ARCH

ਕਿਹੜੀ ਕਿਸਮ ਦਾ universal binary ਬਣਾਇਆ ਜਾਣਾ ਹੈ, ਇਹ ਨਿਰਧਾਰਤ ਕਰੋ। ਇਹ ਵਿਕਲਪ ਕੇਵਲ ਤਦ ਹੀ ਵੈਧ ਹੈ ਜਦੋਂ --enable-universalsdk ਸੈੱਟ ਕੀਤਾ ਗਿਆ ਹੋਵੇ।

ਵਿਕਲਪ:

  • universal2 (x86-64 ਅਤੇ arm64);

  • 32-bit (PPC ਅਤੇ i386);

  • 64-bit (PPC64 ਅਤੇ x86-64);

  • 3-way (i386, PPC ਅਤੇ x86-64);

  • intel (i386 ਅਤੇ x86-64);

  • intel-32 (i386);

  • intel-64 (x86-64);

  • all (PPC, i386, PPC64 ਅਤੇ x86-64)।

ਧਿਆਨ ਦਿਓ ਕਿ ਇਸ configuration item ਲਈ ਦਿੱਤੀਆਂ values, macOS ਉੱਤੇ universal binary wheels ਲਈ ਵਰਤੇ ਜਾਣ ਵਾਲੇ identifiers ਵਰਗੀਆਂ ਨਹੀਂ ਹਨ। ਵੇਰਵਿਆਂ ਲਈ Python Packaging User Guide ਵਿੱਚ macOS ਉੱਤੇ ਵਰਤੇ ਜਾਣ ਵਾਲੇ packaging platform compatibility tags ਵੇਖੋ।

--with-framework-name=FRAMEWORK

ਕੇਵਲ macOS ਉੱਤੇ Python framework ਦਾ ਨਾਮ ਨਿਰਧਾਰਤ ਕਰੋ। ਇਹ ਵਿਕਲਪ ਤਦੋਂ ਹੀ ਵੈਧ ਹੈ ਜਦੋਂ --enable-framework ਸੈੱਟ ਕੀਤਾ ਗਿਆ ਹੋਵੇ (ਮੂਲ: Python)।

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

Python ਦੀ standard library ਵਿੱਚ ਕੁਝ ਅਜਿਹੀਆਂ strings ਹੁੰਦੀਆਂ ਹਨ ਜੋ macOS ਅਤੇ iOS App Store ਵਿੱਚ ਵੰਡ ਲਈ ਭੇਜਣ ਸਮੇਂ ਸਵੈਚਾਲਿਤ ਜਾਂਚ ਟੂਲਾਂ ਵੱਲੋਂ ਗਲਤੀਆਂ ਪੈਦਾ ਕਰ ਸਕਦੀਆਂ ਹਨ। ਜੇ ਇਹ ਵਿਕਲਪ ਸਮਰੱਥ ਕੀਤਾ ਜਾਵੇ, ਤਾਂ App Store ਦੀਆਂ ਲੋੜਾਂ ਅਨੁਸਾਰ ਜਾਣੀਆਂ-ਪਛਾਣੀਆਂ ਸੋਧਾਂ ਲਾਗੂ ਕੀਤੀਆਂ ਜਾਣਗੀਆਂ। ਇੱਕ custom patch file ਵੀ ਦਿੱਤੀ ਜਾ ਸਕਦੀ ਹੈ। ਮੂਲ ਰੂਪ ਵਿੱਚ ਇਹ ਵਿਕਲਪ ਅਸਮਰੱਥ ਹੁੰਦਾ ਹੈ।

Added in version 3.13.

3.3.14. iOS ਵਿਕਲਪ

ਦੇਖੋ :source:`Platforms/Apple/iOS/README.md`|

--enable-framework=INSTALLDIR

ਇੱਕ Python.framework ਬਣਾਓ। macOS ਤੋਂ ਵੱਖਰੇ ਤੌਰ 'ਤੇ, installation path ਦੱਸਣ ਵਾਲਾ INSTALLDIR argument ਲਾਜ਼ਮੀ ਹੈ।

--with-framework-name=FRAMEWORK

Framework ਦਾ ਨਾਮ ਨਿਰਧਾਰਤ ਕਰੋ (ਮੂਲ: Python)।

3.3.15. Cross Compiling ਵਿਕਲਪ

Cross compiling ਜਿਸਨੂੰ cross building ਵੀ ਕਿਹਾ ਜਾਂਦਾ ਹੈ ਦੀ ਵਰਤੋਂ ਕਿਸੇ ਹੋਰ CPU architecture ਜਾਂ platform ਲਈ Python ਬਣਾਉਣ ਵਾਸਤੇ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। Cross compiling ਲਈ build platform ਉੱਤੇ ਇੱਕ Python interpreter ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ। Build Python ਦਾ version, cross-compiled host Python ਦੇ version ਨਾਲ ਮਿਲਣਾ ਚਾਹੀਦਾ ਹੈ।

--build=BUILD

BUILD ਉੱਤੇ build ਕਰਨ ਲਈ configure ਕਰੋ; ਆਮ ਤੌਰ 'ਤੇ ਇਹ config.guess ਰਾਹੀਂ ਆਪਣੇ ਆਪ ਅਨੁਮਾਨਿਆ ਜਾਂਦਾ ਹੈ।

--host=HOST

HOST (target platform) ਉੱਤੇ ਚੱਲਣ ਵਾਲੇ ਪ੍ਰੋਗਰਾਮ ਬਣਾਉਣ ਲਈ cross-compile ਕਰੋ।

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

Cross compiling ਲਈ ਵਰਤੇ ਜਾਣ ਵਾਲੇ python binary ਦਾ path।

Added in version 3.11.

CONFIG_SITE=file

ਇੱਕ environment variable ਜੋ configure overrides ਵਾਲੀ file ਵੱਲ ਇਸ਼ਾਰਾ ਕਰਦਾ ਹੈ।

ਉਦਾਹਰਨ config.site file:

# config.site-aarch64
ac_cv_buggy_getaddrinfo=no
ac_cv_file__dev_ptmx=yes
ac_cv_file__dev_ptc=no
HOSTRUNNER

Cross-compilation ਲਈ host platform ਉੱਤੇ CPython ਚਲਾਉਣ ਵਾਲਾ program।

Added in version 3.11.

Cross compiling ਦੀ ਉਦਾਹਰਨ:

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. Python Build System

3.4.1. Build system ਦੀਆਂ ਮੁੱਖ files

  • configure.ac => configure;

  • Makefile.pre.in => Makefile (configure ਦੁਆਰਾ ਬਣਾਈ ਜਾਂਦੀ ਹੈ);

  • pyconfig.h (configure ਦੁਆਰਾ ਬਣਾਈ ਜਾਂਦੀ ਹੈ);

  • Modules/Setup: C extensions ਜਿਨ੍ਹਾਂ ਨੂੰ Makefile Module/makesetup shell script ਦੀ ਵਰਤੋਂ ਕਰਕੇ build ਕਰਦੀ ਹੈ;

3.4.2. ਮੁੱਖ ਬਿਲਡ ਕਦਮ

  • C ਫਾਈਲਾਂ (.c) ਨੂੰ ਆਬਜੈਕਟ ਫਾਈਲਾਂ (.o) ਵਜੋਂ ਬਿਲਡ ਕੀਤਾ ਜਾਂਦਾ ਹੈ।

  • ਆਬਜੈਕਟ ਫਾਈਲਾਂ ਤੋਂ ਇੱਕ ਸਥਿਰ libpython ਲਾਇਬ੍ਰੇਰੀ (.a) ਬਣਾਈ ਜਾਂਦੀ ਹੈ।

  • python.o ਅਤੇ ਸਥਿਰ libpython ਲਾਇਬ੍ਰੇਰੀ ਨੂੰ ਅੰਤਿਮ python ਪ੍ਰੋਗਰਾਮ ਵਿੱਚ ਲਿੰਕ ਕੀਤਾ ਜਾਂਦਾ ਹੈ।

  • C ਐਕਸਟੈਂਸ਼ਨਾਂ ਨੂੰ Makefile ਦੁਆਰਾ ਬਿਲਡ ਕੀਤਾ ਜਾਂਦਾ ਹੈ (Modules/Setup ਵੇਖੋ)।

3.4.3. ਮੁੱਖ Makefile ਟਾਰਗੇਟ

3.4.3.1. make

ਜ਼ਿਆਦਾਤਰ ਮਾਮਲਿਆਂ ਵਿੱਚ, ਕੁਝ ਕੋਡ ਸੋਧਣ ਜਾਂ ਅੱਪਸਟ੍ਰੀਮ ਤੋਂ ਆਪਣਾ checkout ਤਾਜ਼ਾ ਕਰਨ ਤੋਂ ਬਾਅਦ ਦੁਬਾਰਾ ਬਿਲਡ ਕਰਨ ਲਈ ਤੁਹਾਨੂੰ ਸਿਰਫ਼ make ਚਲਾਉਣ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ। Make ਦੇ ਨਿਯਮਾਂ ਅਨੁਸਾਰ ਇਹ ਮੂਲ (default) ਟਾਰਗੇਟ ਨੂੰ ਬਿਲਡ ਕਰਦਾ ਹੈ, ਜੋ Makefile ਵਿੱਚ ਸਭ ਤੋਂ ਪਹਿਲਾਂ ਪਰਿਭਾਸ਼ਿਤ ਕੀਤਾ ਗਿਆ ਹੁੰਦਾ ਹੈ। ਰਵਾਇਤੀ ਤੌਰ 'ਤੇ (CPython ਪ੍ਰੋਜੈਕਟ ਸਮੇਤ) ਇਹ ਆਮ ਤੌਰ 'ਤੇ all ਟਾਰਗੇਟ ਹੁੰਦਾ ਹੈ। configure ਸਕ੍ਰਿਪਟ autoconf ਵੇਰੀਏਬਲ @DEF_MAKE_ALL_RULE@ ਨੂੰ ਫੈਲਾਉਂਦੀ ਹੈ ਤਾਂ ਜੋ ਇਹ ਸਹੀ ਤੌਰ 'ਤੇ ਦਰਸਾਇਆ ਜਾ ਸਕੇ ਕਿ make all ਕਿਹੜੇ ਟਾਰਗੇਟ ਬਿਲਡ ਕਰੇਗਾ। ਇਸ ਦੀਆਂ ਤਿੰਨ ਚੋਣਾਂ ਹਨ:

  • profile-opt (--enable-optimizations ਨਾਲ ਸੰਰਚਿਤ)

  • build_wasm (ਜੇ ਹੋਸਟ ਪਲੇਟਫਾਰਮ wasm32-wasi* ਜਾਂ wasm32-emscripten ਨਾਲ ਮੇਲ ਖਾਂਦਾ ਹੋਵੇ ਤਾਂ ਚੁਣਿਆ ਜਾਂਦਾ ਹੈ)

  • build_all (ਜਦੋਂ ਉੱਪਰ ਦਿੱਤੀਆਂ ਦੋਨਾਂ ਵਿੱਚੋਂ ਕਿਸੇ ਨੂੰ ਵੀ ਸਪਸ਼ਟ ਤੌਰ 'ਤੇ ਨਹੀਂ ਵਰਤਿਆ ਜਾਂਦਾ)

ਸੋਰਸ ਫਾਈਲਾਂ ਵਿੱਚ ਹੋਈਆਂ ਤਾਜ਼ਾ ਤਬਦੀਲੀਆਂ ਦੇ ਆਧਾਰ 'ਤੇ, Make ਉਹਨਾਂ ਸਾਰੇ ਟਾਰਗੇਟਾਂ (ਆਬਜੈਕਟ ਫਾਈਲਾਂ ਅਤੇ ਐਗਜ਼ਿਕਿਊਟੇਬਲਾਂ) ਨੂੰ ਦੁਬਾਰਾ ਬਿਲਡ ਕਰੇਗਾ ਜੋ ਪੁਰਾਣੇ ਮੰਨੇ ਜਾਂਦੇ ਹਨ, ਲੋੜ ਪੈਣ 'ਤੇ configure ਨੂੰ ਮੁੜ ਚਲਾਉਣਾ ਵੀ ਇਸ ਵਿੱਚ ਸ਼ਾਮਲ ਹੈ। ਹਾਲਾਂਕਿ ਸੋਰਸ/ਟਾਰਗੇਟ ਨਿਰਭਰਤਾਵਾਂ ਬਹੁਤ ਹਨ ਅਤੇ ਹੱਥੋਂ ਸੰਭਾਲੀਆਂ ਜਾਂਦੀਆਂ ਹਨ, ਇਸ ਲਈ ਕਈ ਵਾਰ Make ਕੋਲ ਇਹ ਪਤਾ ਲਗਾਉਣ ਲਈ ਲੋੜੀਂਦੀ ਸਾਰੀ ਜਾਣਕਾਰੀ ਨਹੀਂ ਹੁੰਦੀ ਕਿ ਕਿਹੜੇ ਟਾਰਗੇਟਾਂ ਨੂੰ ਦੁਬਾਰਾ ਬਿਲਡ ਕਰਨ ਦੀ ਲੋੜ ਹੈ। ਇਸ ਕਰਕੇ ਤੁਹਾਨੂੰ ਕਈ ਸਮੱਸਿਆਵਾਂ ਦਾ ਸਾਹਮਣਾ ਕਰਨਾ ਪੈ ਸਕਦਾ ਹੈ। ਜੇ ਤੁਹਾਨੂੰ ਬਿਲਡ ਜਾਂ ਟੈਸਟ ਨਾਲ ਸੰਬੰਧਿਤ ਅਜਿਹੀਆਂ ਸਮੱਸਿਆਵਾਂ ਮਿਲਣ ਜਿਨ੍ਹਾਂ ਦੀ ਹੋਰ ਕੋਈ ਵਜ੍ਹਾ ਸਮਝ ਨਾ ਆਵੇ, ਤਾਂ make clean && make ਚਲਾਉਣਾ ਜ਼ਿਆਦਾਤਰ ਨਿਰਭਰਤਾ-ਸੰਬੰਧੀ ਸਮੱਸਿਆਵਾਂ ਦਾ ਹੱਲ ਕਰ ਸਕਦਾ ਹੈ, ਹਾਲਾਂਕਿ ਇਸ ਨਾਲ ਬਿਲਡ ਕਰਨ ਵਿੱਚ ਵਧੇਰੇ ਸਮਾਂ ਲੱਗੇਗਾ।

3.4.3.2. make platform

python ਪ੍ਰੋਗਰਾਮ ਨੂੰ ਬਿਲਡ ਕਰੋ, ਪਰ ਸਟੈਂਡਰਡ ਲਾਇਬ੍ਰੇਰੀ ਦੇ ਐਕਸਟੈਂਸ਼ਨ ਮੋਡੀਊਲ ਨਾ ਬਣਾਓ। ਇਸ ਨਾਲ platform ਨਾਮ ਦੀ ਇੱਕ ਫਾਈਲ ਬਣਦੀ ਹੈ ਜਿਸ ਵਿੱਚ ਬਿਲਡ ਪਲੇਟਫਾਰਮ ਦਾ ਵੇਰਵਾ ਇੱਕ ਹੀ ਲਾਈਨ ਵਿੱਚ ਹੁੰਦਾ ਹੈ, ਉਦਾਹਰਨ ਲਈ macosx-14.3-arm64-3.12 ਜਾਂ linux-x86_64-3.13।

3.4.3.3. make profile-opt

Profile-Guided Optimization (PGO) ਦੀ ਵਰਤੋਂ ਕਰਕੇ Python ਨੂੰ ਬਿਲਡ ਕਰੋ। ਇਸ ਨੂੰ make ਕਮਾਂਡ (make all ਜਾਂ ਸਿਰਫ਼ make) ਦਾ ਮੂਲ ਟਾਰਗੇਟ ਬਣਾਉਣ ਲਈ configure ਦੀ --enable-optimizations ਚੋਣ ਵਰਤੀ ਜਾ ਸਕਦੀ ਹੈ।

3.4.3.4. make clean

ਬਿਲਡ ਕੀਤੀਆਂ ਫਾਈਲਾਂ ਹਟਾਓ।

3.4.3.5. make distclean

make clean ਦੁਆਰਾ ਕੀਤੇ ਕੰਮ ਤੋਂ ਇਲਾਵਾ, configure ਸਕ੍ਰਿਪਟ ਦੁਆਰਾ ਬਣਾਈਆਂ ਗਈਆਂ ਫਾਈਲਾਂ ਵੀ ਹਟਾਓ। ਦੁਬਾਰਾ ਬਿਲਡ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ configure ਨੂੰ ਮੁੜ ਚਲਾਉਣਾ ਪਵੇਗਾ। [7]

3.4.3.6. make install

all ਟਾਰਗੇਟ ਨੂੰ ਬਿਲਡ ਕਰੋ ਅਤੇ Python ਇੰਸਟਾਲ ਕਰੋ।

3.4.3.7. make test

all ਟਾਰਗੇਟ ਨੂੰ ਬਿਲਡ ਕਰੋ ਅਤੇ GUI ਟੈਸਟਾਂ ਤੋਂ ਬਿਨਾਂ --fast-ci ਚੋਣ ਨਾਲ Python ਟੈਸਟ ਸੂਟ ਚਲਾਓ। ਵੇਰੀਏਬਲ:

  • TESTOPTS: ਵਾਧੂ regrtest ਕਮਾਂਡ-ਲਾਈਨ ਚੋਣਾਂ।

  • TESTPYTHONOPTS: ਵਾਧੂ Python ਕਮਾਂਡ-ਲਾਈਨ ਚੋਣਾਂ।

  • TESTTIMEOUT: ਸਕਿੰਟਾਂ ਵਿੱਚ ਟਾਈਮਆਉਟ (ਮੂਲ: 10 ਮਿੰਟ)।

3.4.3.8. make ci

ਇਹ make test ਵਰਗਾ ਹੀ ਹੈ, ਪਰ GUI ਟੈਸਟਾਂ ਨੂੰ ਵੀ ਚਲਾਉਣ ਲਈ -ugui ਵਰਤਦਾ ਹੈ।

Added in version 3.14.

3.4.3.9. make buildbottest

ਇਹ make test ਵਰਗਾ ਹੀ ਹੈ, ਪਰ --fast-ci ਦੀ ਬਜਾਏ --slow-ci ਚੋਣ ਅਤੇ 20 ਮਿੰਟ ਦਾ ਮੂਲ ਟਾਈਮਆਉਟ ਵਰਤਦਾ ਹੈ।

3.4.3.10. make regen-all

(ਲਗਭਗ) ਸਾਰੀਆਂ ਤਿਆਰ ਕੀਤੀਆਂ ਫਾਈਲਾਂ ਨੂੰ ਮੁੜ ਤਿਆਰ ਕਰੋ। ਇਨ੍ਹਾਂ ਵਿੱਚ bytecode ਕੇਸ ਅਤੇ parser generator ਫਾਈਲਾਂ ਸ਼ਾਮਲ ਹਨ (ਪਰ ਇਨ੍ਹਾਂ ਤੱਕ ਸੀਮਿਤ ਨਹੀਂ)। ਬਾਕੀ generated files ਲਈ make regen-stdlib-module-names ਅਤੇ autoconf ਨੂੰ ਵੱਖਰੇ ਤੌਰ 'ਤੇ ਚਲਾਉਣਾ ਲਾਜ਼ਮੀ ਹੈ।

3.4.4. C ਐਕਸਟੈਂਸ਼ਨ

ਕੁਝ C ਐਕਸਟੈਂਸ਼ਨਾਂ ਨੂੰ built-in ਮੋਡੀਊਲ ਵਜੋਂ ਬਿਲਡ ਕੀਤਾ ਜਾਂਦਾ ਹੈ, ਜਿਵੇਂ ਕਿ sys ਮੋਡੀਊਲ। ਇਹਨਾਂ ਨੂੰ Py_BUILD_CORE_BUILTIN ਮੈਕਰੋ ਪਰਿਭਾਸ਼ਿਤ ਕਰਕੇ ਬਿਲਡ ਕੀਤਾ ਜਾਂਦਾ ਹੈ। Built-in ਮੋਡੀਊਲਾਂ ਵਿੱਚ __file__ ਐਟ੍ਰਿਬਿਊਟ ਨਹੀਂ ਹੁੰਦਾ:

>>> import sys
>>> sys
<module 'sys' (built-in)>
>>> sys.__file__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: ਮੋਡੀਊਲ 'sys' ਵਿੱਚ '__file__' ਐਟ੍ਰਿਬਿਊਟ ਨਹੀਂ ਹੈ

ਹੋਰ C ਐਕਸਟੈਂਸ਼ਨਾਂ ਨੂੰ ਡਾਇਨਾਮਿਕ ਲਾਇਬ੍ਰੇਰੀਆਂ ਵਜੋਂ ਬਿਲਡ ਕੀਤਾ ਜਾਂਦਾ ਹੈ, ਜਿਵੇਂ ਕਿ _asyncio ਮੋਡੀਊਲ। ਇਹਨਾਂ ਨੂੰ Py_BUILD_CORE_MODULE ਮੈਕਰੋ ਪਰਿਭਾਸ਼ਿਤ ਕਰਕੇ ਬਿਲਡ ਕੀਤਾ ਜਾਂਦਾ ਹੈ। Linux x86-64 ਉੱਤੇ ਉਦਾਹਰਨ:

>>> import _asyncio
>>> _asyncio
<module '_asyncio' from '/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 ਐਕਸਟੈਂਸ਼ਨਾਂ ਨੂੰ ਬਿਲਡ ਕਰਨ ਲਈ Makefile ਟਾਰਗੇਟ ਬਣਾਉਣ ਵਾਸਤੇ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਫਾਈਲ ਦੀ ਸ਼ੁਰੂਆਤ ਵਿੱਚ C ਐਕਸਟੈਂਸ਼ਨਾਂ ਨੂੰ built-in ਮੋਡੀਊਲਾਂ ਵਜੋਂ ਬਿਲਡ ਕੀਤਾ ਜਾਂਦਾ ਹੈ। *shared* ਮਾਰਕਰ ਤੋਂ ਬਾਅਦ ਪਰਿਭਾਸ਼ਿਤ ਐਕਸਟੈਂਸ਼ਨਾਂ ਨੂੰ ਡਾਇਨਾਮਿਕ ਲਾਇਬ੍ਰੇਰੀਆਂ ਵਜੋਂ ਬਿਲਡ ਕੀਤਾ ਜਾਂਦਾ ਹੈ।

Include/exports.h ਵਿੱਚ ਮੌਜੂਦ PyAPI_FUNC(), PyAPI_DATA() ਅਤੇ PyMODINIT_FUNC ਮੈਕਰੋ ਇਸ ਗੱਲ ਦੇ ਅਨੁਸਾਰ ਵੱਖ-ਵੱਖ ਢੰਗ ਨਾਲ ਪਰਿਭਾਸ਼ਿਤ ਕੀਤੇ ਜਾਂਦੇ ਹਨ ਕਿ Py_BUILD_CORE_MODULE ਮੈਕਰੋ ਪਰਿਭਾਸ਼ਿਤ ਹੈ ਜਾਂ ਨਹੀਂ:

  • ਜੇ Py_BUILD_CORE_MODULE ਪਰਿਭਾਸ਼ਿਤ ਹੈ ਤਾਂ Py_EXPORTED_SYMBOL ਵਰਤੋ

  • ਨਹੀਂ ਤਾਂ Py_IMPORTED_SYMBOL ਵਰਤੋ।

ਜੇ ਸਾਂਝੀ ਲਾਇਬ੍ਰੇਰੀ ਵਜੋਂ ਬਿਲਡ ਕੀਤੀ ਗਈ C ਐਕਸਟੈਂਸ਼ਨ 'ਤੇ ਗਲਤੀ ਨਾਲ Py_BUILD_CORE_BUILTIN ਮੈਕਰੋ ਵਰਤਿਆ ਜਾਵੇ, ਤਾਂ ਇਸਦਾ PyInit_xxx() ਫੰਕਸ਼ਨ ਐਕਸਪੋਰਟ ਨਹੀਂ ਹੁੰਦਾ, ਜਿਸ ਕਾਰਨ ਇੰਪੋਰਟ ਸਮੇਂ ImportError ਆ ਜਾਂਦੀ ਹੈ।

3.5. ਕੰਪਾਈਲਰ ਅਤੇ ਲਿੰਕਰ ਫਲੈਗ

./configure ਸਕ੍ਰਿਪਟ ਅਤੇ ਇਨਵਾਇਰਨਮੈਂਟ ਵੇਰੀਏਬਲਾਂ ਦੁਆਰਾ ਸੈੱਟ ਕੀਤੀਆਂ ਚੋਣਾਂ, ਜੋ Makefile ਦੁਆਰਾ ਵਰਤੀਆਂ ਜਾਂਦੀਆਂ ਹਨ।

3.5.1. ਪ੍ਰੀ-ਪ੍ਰੋਸੈਸਰ ਫਲੈਗ

CONFIGURE_CPPFLAGS

./configure ਸਕ੍ਰਿਪਟ ਨੂੰ ਦਿੱਤੇ ਗਏ CPPFLAGS ਵੇਰੀਏਬਲ ਦਾ ਮੁੱਲ।

Added in version 3.6.

CPPFLAGS

(Objective) C/C++ ਪ੍ਰੀ-ਪ੍ਰੋਸੈਸਰ ਫਲੈਗ, ਉਦਾਹਰਨ ਲਈ -Iinclude_dir, ਜੇ ਤੁਹਾਡੀਆਂ ਹੈਡਰ ਫਾਈਲਾਂ ਕਿਸੇ ਗੈਰ-ਮਿਆਰੀ include_dir ਡਾਇਰੈਕਟਰੀ ਵਿੱਚ ਹਨ।

ਇਨਵਾਇਰਨਮੈਂਟ ਵੇਰੀਏਬਲਾਂ ਵਿੱਚ ਦਿੱਤੀਆਂ ਡਾਇਰੈਕਟਰੀਆਂ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਐਕਸਟੈਂਸ਼ਨ ਮੋਡੀਊਲ ਬਿਲਡ ਕਰਨ ਲਈ CPPFLAGS ਅਤੇ LDFLAGS ਦੋਵੇਂ ਵਿੱਚ ਸ਼ੈੱਲ ਵਾਲਾ ਮੁੱਲ ਸ਼ਾਮਲ ਹੋਣਾ ਲਾਜ਼ਮੀ ਹੈ।

BASECPPFLAGS

Added in version 3.4.

PY_CPPFLAGS

ਇੰਟਰਪ੍ਰੀਟਰ ਆਬਜੈਕਟ ਫਾਈਲਾਂ ਨੂੰ ਬਿਲਡ ਕਰਨ ਲਈ ਸ਼ਾਮਲ ਕੀਤੇ ਵਾਧੂ ਪ੍ਰੀ-ਪ੍ਰੋਸੈਸਰ ਫਲੈਗ।

ਮੂਲ: $(BASECPPFLAGS) -I. -I$(srcdir)/Include $(CONFIGURE_CPPFLAGS) $(CPPFLAGS)।

Added in version 3.2.

3.5.2. ਕੰਪਾਈਲਰ ਫਲੈਗ

CC

C compiler ਕਮਾਂਡ।

ਉਦਾਹਰਨ: gcc -pthread।

CXX

C++ ਕੰਪਾਈਲਰ ਕਮਾਂਡ।

ਉਦਾਹਰਨ: g++ -pthread।

CFLAGS

C compiler flags।

CFLAGS_NODIST

CFLAGS_NODIST ਦੀ ਵਰਤੋਂ ਇੰਟਰਪ੍ਰੀਟਰ ਅਤੇ ਸਟੈਂਡਰਡ ਲਾਇਬ੍ਰੇਰੀ ਦੀਆਂ C ਐਕਸਟੈਂਸ਼ਨਾਂ ਨੂੰ ਬਿਲਡ ਕਰਨ ਲਈ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਇਸਦੀ ਵਰਤੋਂ ਤਦੋਂ ਕਰੋ ਜਦੋਂ ਕੋਈ ਕੰਪਾਈਲਰ ਫਲੈਗ Python ਇੰਸਟਾਲ ਹੋਣ ਤੋਂ ਬਾਅਦ CFLAGS ਦਾ ਹਿੱਸਾ ਨਹੀਂ ਹੋਣਾ ਚਾਹੀਦਾ (gh-65320)।

ਖ਼ਾਸ ਤੌਰ 'ਤੇ, CFLAGS ਵਿੱਚ ਹੇਠ ਲਿਖੇ ਸ਼ਾਮਲ ਨਹੀਂ ਹੋਣੇ ਚਾਹੀਦੇ:

  • ਕੰਪਾਈਲਰ ਫਲੈਗ -I (include ਫਾਈਲਾਂ ਲਈ ਖੋਜ ਮਾਰਗ ਸੈੱਟ ਕਰਨ ਵਾਸਤੇ)। -I ਫਲੈਗ ਖੱਬੇ ਤੋਂ ਸੱਜੇ ਪ੍ਰੋਸੈਸ ਕੀਤੇ ਜਾਂਦੇ ਹਨ ਅਤੇ CFLAGS ਵਿੱਚ ਮੌਜੂਦ ਕੋਈ ਵੀ ਫਲੈਗ ਯੂਜ਼ਰ ਜਾਂ ਪੈਕੇਜ ਦੁਆਰਾ ਦਿੱਤੇ -I ਫਲੈਗਾਂ ਨਾਲੋਂ ਪਹਿਲਾਂ ਲਾਗੂ ਹੋ ਜਾਣਗੇ।

  • -Werror ਵਰਗੇ hardening ਫਲੈਗ, ਕਿਉਂਕਿ ਡਿਸਟ੍ਰਿਬਿਊਸ਼ਨ ਇਹ ਨਿਯੰਤਰਿਤ ਨਹੀਂ ਕਰ ਸਕਦੀਆਂ ਕਿ ਯੂਜ਼ਰਾਂ ਦੁਆਰਾ ਇੰਸਟਾਲ ਕੀਤੇ ਪੈਕੇਜ ਅਜਿਹੇ ਸਖ਼ਤ ਮਿਆਰਾਂ ਦੀ ਪਾਲਣਾ ਕਰਦੇ ਹਨ ਜਾਂ ਨਹੀਂ।

Added in version 3.5.

COMPILEALL_OPTS

make install ਦੌਰਾਨ PYC ਫਾਈਲਾਂ ਬਣਾਉਣ ਸਮੇਂ compileall ਕਮਾਂਡ-ਲਾਈਨ ਨੂੰ ਦਿੱਤੀਆਂ ਜਾਣ ਵਾਲੀਆਂ ਚੋਣਾਂ। ਮੂਲ: -j0।

Added in version 3.12.

EXTRA_CFLAGS

ਵਾਧੂ C ਕੰਪਾਈਲਰ ਫਲੈਗ।

CONFIGURE_CFLAGS

./configure ਸਕ੍ਰਿਪਟ ਨੂੰ ਦਿੱਤੇ ਗਏ CFLAGS ਵੇਰੀਏਬਲ ਦਾ ਮੁੱਲ।

Added in version 3.2.

CONFIGURE_CFLAGS_NODIST

./configure ਸਕ੍ਰਿਪਟ ਨੂੰ ਦਿੱਤੇ ਗਏ CFLAGS_NODIST ਵੇਰੀਏਬਲ ਦਾ ਮੁੱਲ।

Added in version 3.5.

BASECFLAGS

ਮੂਲ ਕੰਪਾਈਲਰ ਫਲੈਗ।

OPT

ਓਪਟੀਮਾਈਜ਼ੇਸ਼ਨ ਫਲੈਗ।

CFLAGS_ALIASING

Python/dtoa.c ਨੂੰ ਕੰਪਾਈਲ ਕਰਨ ਲਈ ਵਰਤੇ ਜਾਣ ਵਾਲੇ strict ਜਾਂ non-strict aliasing ਫਲੈਗ।

Added in version 3.7.

CFLAGS_CEVAL

Python/ceval.c ਨੂੰ ਕੰਪਾਈਲ ਕਰਨ ਲਈ ਵਰਤੇ ਜਾਣ ਵਾਲੇ ਫਲੈਗ।

Added in version 3.14.5.

CCSHARED

ਸਾਂਝੀ ਲਾਇਬ੍ਰੇਰੀ ਬਣਾਉਣ ਲਈ ਵਰਤੇ ਜਾਣ ਵਾਲੇ ਕੰਪਾਈਲਰ ਫਲੈਗ।

ਉਦਾਹਰਨ ਲਈ, Linux ਅਤੇ BSD ਉੱਤੇ -fPIC ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ।

CFLAGSFORSHARED

ਇੰਟਰਪ੍ਰੀਟਰ ਆਬਜੈਕਟ ਫਾਈਲਾਂ ਨੂੰ ਬਿਲਡ ਕਰਨ ਲਈ ਸ਼ਾਮਲ ਕੀਤੇ ਵਾਧੂ C ਫਲੈਗ।

ਮੂਲ: ਜੇ --enable-shared ਵਰਤੀ ਗਈ ਹੈ ਤਾਂ $(CCSHARED), ਨਹੀਂ ਤਾਂ ਖਾਲੀ ਸਟਰਿੰਗ।

PY_CFLAGS

ਮੂਲ: $(BASECFLAGS) $(OPT) $(CONFIGURE_CFLAGS) $(CFLAGS) $(EXTRA_CFLAGS)।

PY_CFLAGS_NODIST

ਮੂਲ: $(CONFIGURE_CFLAGS_NODIST) $(CFLAGS_NODIST) -I$(srcdir)/Include/internal।

Added in version 3.5.

PY_STDMODULE_CFLAGS

ਇੰਟਰਪ੍ਰੀਟਰ ਆਬਜੈਕਟ ਫਾਈਲਾਂ ਨੂੰ ਬਿਲਡ ਕਰਨ ਲਈ ਵਰਤੇ ਜਾਣ ਵਾਲੇ C ਫਲੈਗ।

ਮੂਲ: $(PY_CFLAGS) $(PY_CFLAGS_NODIST) $(PY_CPPFLAGS) $(CFLAGSFORSHARED)।

Added in version 3.7.

PY_CORE_CFLAGS

ਮੂਲ: $(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE।

Added in version 3.2.

PY_BUILTIN_MODULE_CFLAGS

posix ਮੋਡੀਊਲ ਵਾਂਗ ਸਟੈਂਡਰਡ ਲਾਇਬ੍ਰੇਰੀ ਐਕਸਟੈਂਸ਼ਨ ਮੋਡੀਊਲ ਨੂੰ built-in ਮੋਡੀਊਲ ਵਜੋਂ ਬਿਲਡ ਕਰਨ ਲਈ ਕੰਪਾਈਲਰ ਫਲੈਗ।

ਮੂਲ: $(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE_BUILTIN।

Added in version 3.8.

PURIFY

Purify ਕਮਾਂਡ। Purify ਇੱਕ ਮੈਮੋਰੀ ਡੀਬੱਗਰ ਪ੍ਰੋਗਰਾਮ ਹੈ।

ਮੂਲ: ਖਾਲੀ ਸਟਰਿੰਗ (ਵਰਤੀ ਨਹੀਂ ਜਾਂਦੀ)।

3.5.3. ਲਿੰਕਰ ਫਲੈਗ

LINKCC

python ਅਤੇ _testembed ਵਰਗੇ ਪ੍ਰੋਗਰਾਮਾਂ ਨੂੰ ਬਿਲਡ ਕਰਨ ਲਈ ਵਰਤੀ ਜਾਣ ਵਾਲੀ ਲਿੰਕਰ ਕਮਾਂਡ।

ਮੂਲ: $(PURIFY) $(CC)।

CONFIGURE_LDFLAGS

./configure ਸਕ੍ਰਿਪਟ ਨੂੰ ਦਿੱਤੇ ਗਏ LDFLAGS ਵੇਰੀਏਬਲ ਦਾ ਮੁੱਲ।

CFLAGS, LDFLAGS ਆਦਿ ਨੂੰ ਸਿੱਧਾ ਮੁੱਲ ਨਾ ਦਿਓ, ਤਾਂ ਜੋ ਵਰਤੋਂਕਾਰ ਪਹਿਲਾਂ ਤੋਂ ਸੈੱਟ ਕੀਤੀਆਂ ਕੀਮਤਾਂ ਨੂੰ ਓਵਰਰਾਈਟ ਕੀਤੇ ਬਿਨਾਂ ਕਮਾਂਡ-ਲਾਈਨ ਰਾਹੀਂ ਇਨ੍ਹਾਂ ਵਿੱਚ ਆਪਣੀਆਂ ਕੀਮਤਾਂ ਜੋੜ ਸਕਣ।

Added in version 3.2.

LDFLAGS_NODIST

LDFLAGS_NODIST ਦੀ ਵਰਤੋਂ CFLAGS_NODIST ਵਾਂਗ ਹੀ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਇਸਦੀ ਵਰਤੋਂ ਉਸ ਵੇਲੇ ਕਰੋ ਜਦੋਂ ਕੋਈ ਲਿੰਕਰ ਫਲੈਗ Python ਇੰਸਟਾਲ ਹੋਣ ਤੋਂ ਬਾਅਦ LDFLAGS ਦਾ ਹਿੱਸਾ ਨਹੀਂ ਹੋਣਾ ਚਾਹੀਦਾ (gh-65320)।

ਖ਼ਾਸ ਤੌਰ 'ਤੇ, LDFLAGS ਵਿੱਚ ਹੇਠ ਲਿਖੇ ਸ਼ਾਮਲ ਨਹੀਂ ਹੋਣੇ ਚਾਹੀਦੇ:

  • ਕੰਪਾਈਲਰ ਫਲੈਗ -L (ਲਾਇਬ੍ਰੇਰੀਆਂ ਲਈ ਖੋਜ ਮਾਰਗ ਸੈੱਟ ਕਰਨ ਵਾਸਤੇ)। -L ਫਲੈਗ ਖੱਬੇ ਤੋਂ ਸੱਜੇ ਪ੍ਰੋਸੈਸ ਕੀਤੇ ਜਾਂਦੇ ਹਨ ਅਤੇ LDFLAGS ਵਿੱਚ ਮੌਜੂਦ ਕੋਈ ਵੀ ਫਲੈਗ ਯੂਜ਼ਰ ਜਾਂ ਪੈਕੇਜ ਦੁਆਰਾ ਦਿੱਤੇ -L ਫਲੈਗਾਂ ਨਾਲੋਂ ਪਹਿਲਾਂ ਲਾਗੂ ਹੋ ਜਾਣਗੇ।

CONFIGURE_LDFLAGS_NODIST

./configure ਸਕ੍ਰਿਪਟ ਨੂੰ ਦਿੱਤੇ ਗਏ LDFLAGS_NODIST ਵੇਰੀਏਬਲ ਦਾ ਮੁੱਲ।

Added in version 3.8.

LDFLAGS

ਲਿੰਕਰ ਫਲੈਗ, ਉਦਾਹਰਨ ਲਈ -Llib_dir, ਜੇ ਤੁਹਾਡੀਆਂ ਲਾਇਬ੍ਰੇਰੀਆਂ ਕਿਸੇ ਗੈਰ-ਮਿਆਰੀ lib_dir ਡਾਇਰੈਕਟਰੀ ਵਿੱਚ ਹਨ।

ਇਨਵਾਇਰਨਮੈਂਟ ਵੇਰੀਏਬਲਾਂ ਵਿੱਚ ਦਿੱਤੀਆਂ ਡਾਇਰੈਕਟਰੀਆਂ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਐਕਸਟੈਂਸ਼ਨ ਮੋਡੀਊਲ ਬਿਲਡ ਕਰਨ ਲਈ CPPFLAGS ਅਤੇ LDFLAGS ਦੋਵੇਂ ਵਿੱਚ ਸ਼ੈੱਲ ਵਾਲਾ ਮੁੱਲ ਸ਼ਾਮਲ ਹੋਣਾ ਲਾਜ਼ਮੀ ਹੈ।

ਜੇ ਦਿੱਤੇ ਗਏ ਲਿੰਕਰ ਫਲੈਗ ਕਿਸੇ ਖ਼ਾਸ ਐਗਜ਼ਿਕਿਊਟੇਬਲ ਲਈ ਹਨ, ਜਿਵੇਂ GCC ਦਾ -pie ਫਲੈਗ, ਤਾਂ ਕਿਰਪਾ ਕਰਕੇ EXE_LDFLAGS ਵਰਤਣ ਬਾਰੇ ਵਿਚਾਰ ਕਰੋ।

LIBS

Python ਐਗਜ਼ਿਕਿਊਟੇਬਲ ਨੂੰ ਲਿੰਕ ਕਰਦੇ ਸਮੇਂ ਲਾਇਬ੍ਰੇਰੀਆਂ ਨੂੰ ਲਿੰਕਰ ਤੱਕ ਭੇਜਣ ਲਈ ਵਰਤੇ ਜਾਣ ਵਾਲੇ ਲਿੰਕਰ ਫਲੈਗ।

ਉਦਾਹਰਨ: -lrt।

LDSHARED

ਸਾਂਝੀ ਲਾਇਬ੍ਰੇਰੀ ਬਣਾਉਣ ਲਈ ਕਮਾਂਡ।

ਮੂਲ: @LDSHARED@ $(PY_LDFLAGS)।

BLDSHARED

libpython ਸਾਂਝੀ ਲਾਇਬ੍ਰੇਰੀ ਬਣਾਉਣ ਲਈ ਕਮਾਂਡ।

ਮੂਲ: @BLDSHARED@ $(PY_CORE_LDFLAGS)।

PY_LDFLAGS

ਮੂਲ: $(CONFIGURE_LDFLAGS) $(LDFLAGS)।

PY_LDFLAGS_NODIST

ਮੂਲ: $(CONFIGURE_LDFLAGS_NODIST) $(LDFLAGS_NODIST)।

Added in version 3.8.

PY_CORE_LDFLAGS

ਇੰਟਰਪ੍ਰੀਟਰ ਆਬਜੈਕਟ ਫਾਈਲਾਂ ਨੂੰ ਬਿਲਡ ਕਰਨ ਲਈ ਵਰਤੇ ਜਾਣ ਵਾਲੇ ਲਿੰਕਰ ਫਲੈਗ।

Added in version 3.8.

EXE_LDFLAGS

ਇੰਟਰਪ੍ਰੀਟਰ ਵਰਗੇ ਐਗਜ਼ਿਕਿਊਟੇਬਲ ਟਾਰਗੇਟਾਂ ਨੂੰ ਬਿਲਡ ਕਰਨ ਲਈ ਵਰਤੇ ਜਾਣ ਵਾਲੇ ਲਿੰਕਰ ਫਲੈਗ। ਜੇ PY_CORE_EXE_LDFLAGS ਦਿੱਤਾ ਗਿਆ ਹੋਵੇ, ਤਾਂ ਇਹ PY_CORE_LDFLAGS ਦੀ ਥਾਂ ਵਰਤਿਆ ਜਾਵੇਗਾ।

Added in version 3.15.

CONFIGURE_EXE_LDFLAGS

./configure ਸਕ੍ਰਿਪਟ ਨੂੰ ਦਿੱਤੇ ਗਏ EXE_LDFLAGS ਵੇਰੀਏਬਲ ਦਾ ਮੁੱਲ।

Added in version 3.15.

PY_CORE_EXE_LDFLAGS

ਇੰਟਰਪ੍ਰੀਟਰ ਅਤੇ ਐਗਜ਼ਿਕਿਊਟੇਬਲ ਟਾਰਗੇਟਾਂ ਨੂੰ ਬਿਲਡ ਕਰਨ ਲਈ ਵਰਤੇ ਜਾਣ ਵਾਲੇ ਲਿੰਕਰ ਫਲੈਗ।

ਮੂਲ: $(PY_CORE_LDFLAGS)।

Added in version 3.15.

ਫੁੱਟਨੋਟ