3. Python ਦੀ ਸੰਰਚਨਾ¶
3.1. ਬਿਲਡ ਲਈ ਲੋੜਾਂ¶
CPython ਨੂੰ ਬਿਲਡ ਕਰਨ ਲਈ ਤੁਹਾਨੂੰ ਹੇਠ ਲਿਖੀਆਂ ਚੀਜ਼ਾਂ ਦੀ ਲੋੜ ਹੋਵੇਗੀ:
ਇੱਕ C11 compiler। ਵਿਕਲਪਿਕ C11 ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਲਾਜ਼ਮੀ ਨਹੀਂ ਹਨ।
Windows ਉੱਤੇ Microsoft Visual Studio 2017 ਜਾਂ ਇਸ ਤੋਂ ਬਾਅਦ ਵਾਲਾ ਸੰਸਕਰਣ ਲਾਜ਼ਮੀ ਹੈ।
IEEE 754 floating-point ਨੰਬਰਾਂ ਅਤੇ floating-point Not-a-Number (NaN) ਲਈ ਸਮਰਥਨ।
Threads ਲਈ ਸਮਰਥਨ।
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 ਮੋਡੀਊਲ |
|---|---|---|
3.3.0 ਦੀ ਸਿਫ਼ਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ |
||
2.5.0 |
||
libreadline ਜਾਂ libedit [2] |
||
|
||
3.15.2 |
||
8.5.12 |
||
1.2.2.1 |
||
1.4.5 |
ਧਿਆਨ ਰਹੇ ਕਿ ਇਸ ਸਾਰਣੀ ਵਿੱਚ ਸਾਰੇ ਵਿਕਲਪਿਕ ਮੋਡੀਊਲ ਸ਼ਾਮਲ ਨਹੀਂ ਹਨ; ਖ਼ਾਸ ਤੌਰ 'ਤੇ platform-ਵਿਸ਼ੇਸ਼ ਮੋਡੀਊਲ, ਜਿਵੇਂ winreg, ਇੱਥੇ ਸੂਚੀਬੱਧ ਨਹੀਂ ਹਨ।
See also
devguide ਵਿੱਚ ਸਾਰੇ ਮੋਡੀਊਲਾਂ ਨੂੰ ਬਿਲਡ ਕਰਨ ਲਈ ਲੋੜੀਂਦੀਆਂ dependencies ਦੀ ਪੂਰੀ ਸੂਚੀ ਅਤੇ ਆਮ platforms ਉੱਤੇ ਉਹਨਾਂ ਨੂੰ ਸਥਾਪਿਤ ਕਰਨ ਦੀਆਂ ਹਦਾਇਤਾਂ ਦਿੱਤੀਆਂ ਗਈਆਂ ਹਨ।
--with-system-expatਬਾਹਰੀ libexpat library ਨਾਲ ਬਿਲਡ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ।
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.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ਮੋਡੀਊਲ ਦੇ_sqliteextension 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_DIGITto15or30.
- --with-suffix=SUFFIX¶
Python executable ਲਈ SUFFIX suffix ਸੈੱਟ ਕਰੋ।
Windows ਅਤੇ macOS ਉੱਤੇ ਮੂਲ suffix
.exeਹੈ (python.exeexecutable), Emscripten node ਉੱਤੇ.js, Emscripten browser ਉੱਤੇ.html, WASI ਉੱਤੇ.wasmਅਤੇ ਹੋਰ platforms ਉੱਤੇ ਖਾਲੀ string (pythonexecutable) ਹੁੰਦੀ ਹੈ।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.pathseppath separator ਵੇਖੋ।Added in version 3.9.
- --without-decimal-contextvar¶
_decimalextension 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_LOCALEmacro ਨੂੰ ਪਰਿਭਾਸ਼ਿਤ ਨਾ ਕਰੋ।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._bundledpackage ਨੂੰ ਸਥਾਪਿਤ ਨਹੀਂ ਕਰਦਾ।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=1environment variable ਸੈੱਟ ਕਰੋ।ਜੇ ਅੰਕੜੇ ਇਕੱਠੇ ਕਰਨ ਦੀ ਸੁਵਿਧਾ ਚਾਲੂ ਸੀ ਅਤੇ ਅੰਕੜੇ ਸਾਫ਼ ਨਹੀਂ ਕੀਤੇ ਗਏ, ਤਾਂ Python ਬੰਦ ਹੋਣ ਸਮੇਂ ਅੰਕੜੇ ਡੰਪ ਕੀਤੇ ਜਾਣਗੇ।
ਅਸਰ:
-X pystatscommand line ਵਿਕਲਪ ਜੋੜੋ।PYTHONSTATSenvironment variable ਜੋੜੋ।Py_STATSmacro ਪਰਿਭਾਸ਼ਿਤ ਕਰੋ।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_DISABLEDmacro ਪਰਿਭਾਸ਼ਿਤ ਕਰਦਾ ਹੈ ਅਤੇ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=0environment variable ਸੈੱਟ ਕਰੋ।yes-off: JIT ਬਣਾਓ, ਪਰ ਇਸਨੂੰ ਮੂਲ ਰੂਪ ਵਿੱਚ ਅਸਮਰੱਥ ਰੱਖੋ। ਰਨਟਾਈਮ ਦੌਰਾਨ ਇਸਨੂੰ ਸਮਰੱਥ ਕਰਨ ਲਈPYTHON_JIT=1environment variable ਸੈੱਟ ਕਰੋ।interpreter: "JIT interpreter" ਨੂੰ ਸਮਰੱਥ ਕਰੋ (ਇਹ ਕੇਵਲ ਉਹਨਾਂ ਲਈ ਲਾਭਦਾਇਕ ਹੈ ਜੋ JIT ਦੀ ਖੁਦ ਡੀਬੱਗਿੰਗ ਕਰ ਰਹੇ ਹਨ)। ਰਨਟਾਈਮ ਦੌਰਾਨ ਇਸਨੂੰ ਅਸਮਰੱਥ ਕਰਨ ਲਈPYTHON_JIT=0environment 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-configutility ਦਾ ਮਾਰਗ।
- 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¶
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ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਪ੍ਰਾਪਤ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ।
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_FLAGSvariables ਨੂੰ ਪਰਿਭਾਸ਼ਿਤ ਕਰਕੇ ਕ੍ਰਮਵਾਰ 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 ਨੂੰ ਟ੍ਰੇਸ ਕਰਨ ਯੋਗ ਬਣਾਉਂਦੇ ਹਨ। ਇਹ flagssysconfigਰਾਹੀਂ 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 ਲਾਜ਼ਮੀ ਹੈ।PYTHONMALLOCenvironment variable ਵੀ ਵੇਖੋ।
- --without-pymalloc¶
ਵਿਸ਼ੇਸ਼ Python memory allocator pymalloc ਨੂੰ ਅਸਮਰੱਥ ਕਰੋ (ਮੂਲ ਰੂਪ ਵਿੱਚ ਸਮਰੱਥ)।
PYTHONMALLOCenvironment 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_HUGEPAGESenvironment 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-hugepagesflag ਵਰਤੋ ਜਾਂUsePymallocHugepagesMSBuild property ਸੈੱਟ ਕਰੋ।Added in version 3.15.
- --without-doc-strings¶
ਮੈਮੋਰੀ ਦੀ ਵਰਤੋਂ ਘਟਾਉਣ ਲਈ static documentation strings ਨੂੰ ਅਸਮਰੱਥ ਕਰੋ (ਮੂਲ ਰੂਪ ਵਿੱਚ ਸਮਰੱਥ)। Python ਵਿੱਚ ਪਰਿਭਾਸ਼ਿਤ documentation strings ਇਸ ਨਾਲ ਪ੍ਰਭਾਵਿਤ ਨਹੀਂ ਹੁੰਦੀਆਂ।
Don't define the
WITH_DOC_STRINGSmacro.-
WITH_DOC_STRINGS¶
Define this macro to include static documentation strings in the build. It is defined by default, unless
--without-doc-stringsis used.
PyDoc_STRVAR()macro ਵੇਖੋ।-
WITH_DOC_STRINGS¶
- --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.
-
Py_REMOTE_DEBUG¶
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 showrefcountcommand line ਵਿਕਲਪ ਜੋੜੋ।Parser ਨੂੰ debug ਕਰਨ ਲਈ
-dcommand line ਵਿਕਲਪ ਅਤੇPYTHONDEBUGenvironment variable ਜੋੜੋ।__lltrace__variable ਲਈ ਸਮਰਥਨ ਜੋੜੋ: ਜੇ ਇਹ variable ਪਰਿਭਾਸ਼ਿਤ ਹੋਵੇ, ਤਾਂ bytecode evaluation loop ਵਿੱਚ low-level tracing ਸਮਰੱਥ ਕਰੋ।Buffer overflow ਅਤੇ ਹੋਰ memory errors ਦੀ ਪਛਾਣ ਕਰਨ ਲਈ memory allocators ਉੱਤੇ debug hooks ਇੰਸਟਾਲ ਕਰੋ।
Py_DEBUGਅਤੇPy_REF_DEBUGmacros ਪਰਿਭਾਸ਼ਿਤ ਕਰੋ।Runtime checks ਜੋੜੋ:
#ifdef Py_DEBUGਅਤੇ#endifਨਾਲ ਘਿਰਿਆ code।assert(...)ਅਤੇ_PyObject_ASSERT(...)assertions ਨੂੰ ਸਮਰੱਥ ਕਰੋ:NDEBUGmacro ਸੈੱਟ ਨਾ ਕਰੋ (--with-assertionsconfigure ਵਿਕਲਪ ਵੀ ਵੇਖੋ)। ਮੁੱਖ 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_DEBUGmacro ਪਰਿਭਾਸ਼ਿਤ ਕਰੋ (ਮੂਲ ਰੂਪ ਵਿੱਚ ਅਸਮਰੱਥ)।
- --with-trace-refs¶
Debugging ਦੇ ਉਦੇਸ਼ ਲਈ tracing references ਸਮਰੱਥ ਕਰੋ (ਮੂਲ ਰੂਪ ਵਿੱਚ ਅਸਮਰੱਥ)।
ਅਸਰ:
Py_TRACE_REFSmacro ਪਰਿਭਾਸ਼ਿਤ ਕਰੋ।sys.getobjects()function ਜੋੜੋ।PYTHONDUMPREFSenvironment variable ਜੋੜੋ।
Python ਬੰਦ ਹੋਣ ਸਮੇਂ ਹਾਲੇ ਵੀ ਮੌਜੂਦ objects ਅਤੇ ਉਨ੍ਹਾਂ ਦੇ reference counts ਨੂੰ dump ਕਰਨ ਲਈ
PYTHONDUMPREFSenvironment 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(...);।ਜੇ ਇਹ ਸੈੱਟ ਕੀਤਾ ਗਿਆ ਹੋਵੇ, ਤਾਂ
NDEBUGmacro ਨੂੰOPTcompiler 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 ਦੇ ਵਿਕਲਪ¶
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ਵਰਤਿਆ ਹੀ ਨਾ ਗਿਆ ਹੋਵੇ, ਪਰ sharedlibpythonਨੂੰ ਬਣਾਉਣਾ ਜਾਰੀ ਰੱਖੋ (ਹੋਰ ਪ੍ਰੋਗਰਾਮਾਂ ਦੁਆਰਾ ਵਰਤੋਂ ਲਈ)।ਜੇ
--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¶
ਇੰਸਟਾਲ ਕੀਤੀ ਹੋਈ
expatlibrary ਦੀ ਵਰਤੋਂ ਕਰਕੇpyexpatਮੋਡੀਊਲ ਬਣਾਓ (ਮੂਲ ਰੂਪ ਵਿੱਚ ਨਹੀਂ)।
- --with-system-libmpdec¶
ਇੰਸਟਾਲ ਕੀਤੀ ਹੋਈ
mpdecimallibrary ਦੀ ਵਰਤੋਂ ਕਰਕੇ_decimalextension module ਬਣਾਓ;decimalਮੋਡੀਊਲ ਵੇਖੋ (ਮੂਲ ਰੂਪ ਵਿੱਚ ਹਾਂ)।Added in version 3.3.
Changed in version 3.13: ਮੂਲ ਰੂਪ ਵਿੱਚ ਇੰਸਟਾਲ ਕੀਤੀ ਹੋਈ
mpdecimallibrary ਦੀ ਵਰਤੋਂ ਕਰੋ।Changed in version 3.15: ਜੇ ਇੰਸਟਾਲ ਕੀਤੀ ਹੋਈ
mpdecimallibrary ਨਾ ਮਿਲੇ, ਤਾਂ bundled library ਦੀ ਨਕਲ ਹੁਣ ਆਪਣੇ ਆਪ ਨਹੀਂ ਚੁਣੀ ਜਾਵੇਗੀ। ਕੇਵਲ Python 3.15 ਵਿੱਚ ਹੀ ਇਸਨੂੰ--with-system-libmpdec=noਜਾਂ--without-system-libmpdecਦੀ ਵਰਤੋਂ ਕਰਕੇ ਸਪਸ਼ਟ ਤੌਰ 'ਤੇ ਚੁਣਿਆ ਜਾ ਸਕਦਾ ਹੈ।Deprecated since version 3.13, will be removed in version 3.16:
mpdecimallibrary ਦੇ source code ਦੀ ਇੱਕ ਨਕਲ ਹੁਣ Python 3.16 ਨਾਲ ਵੰਡ ਕੇ ਨਹੀਂ ਦਿੱਤੀ ਜਾਵੇਗੀ।See also
- --with-readline=readline|editline¶
readlineਮੋਡੀਊਲ ਲਈ backend library ਨਿਰਧਾਰਤ ਕਰੋ।readline: backend ਵਜੋਂ readline ਦੀ ਵਰਤੋਂ ਕਰੋ।
editline: backend ਵਜੋਂ editline ਦੀ ਵਰਤੋਂ ਕਰੋ।
Added in version 3.10.
- --without-readline¶
readlineਮੋਡੀਊਲ ਨਾ ਬਣਾਓ (ਮੂਲ ਰੂਪ ਵਿੱਚ ਬਣਾਇਆ ਜਾਂਦਾ ਹੈ)।HAVE_LIBREADLINEmacro ਨੂੰ ਪਰਿਭਾਸ਼ਿਤ ਨਾ ਕਰੋ।Added in version 3.10.
- --with-libm=STRING¶
libmਗਣਿਤ library ਨੂੰ STRING ਨਾਲ override ਕਰੋ (ਮੂਲ ਰੂਪ ਵਿੱਚ ਇਹ ਸਿਸਟਮ-ਨਿਰਭਰ ਹੁੰਦੀ ਹੈ)।
- --with-libc=STRING¶
libcC 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 ਲਈ ਵਰਤੇ ਜਾਣ ਵਾਲੇ
pythonbinary ਦਾ 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 ਜਿਨ੍ਹਾਂ ਨੂੰ MakefileModule/makesetupshell 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_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.
ਫੁੱਟਨੋਟ
git clean -fdx ਤੁਹਾਡੇ checkout ਨੂੰ "ਸਾਫ਼" ਕਰਨ ਦਾ ਹੋਰ ਵੀ ਵੱਧ ਸਖ਼ਤ ਤਰੀਕਾ ਹੈ। ਇਹ Git ਨੂੰ ਅਣਜਾਣੀਆਂ ਸਾਰੀਆਂ ਫਾਈਲਾਂ ਹਟਾ ਦਿੰਦਾ ਹੈ। git bisect ਨਾਲ ਬੱਗ ਲੱਭਣ ਸਮੇਂ ਪੂਰੀ ਤਰ੍ਹਾਂ ਸਾਫ਼ ਬਿਲਡ ਯਕੀਨੀ ਬਣਾਉਣ ਲਈ ਹਰ ਜਾਂਚ ਦੇ ਵਿਚਕਾਰ ਇਸਦੀ ਸਿਫ਼ਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਇਸਨੂੰ ਧਿਆਨ ਨਾਲ ਵਰਤੋ, ਕਿਉਂਕਿ ਇਹ Git ਵਿੱਚ ਕਮਿਟ ਨਾ ਕੀਤੀਆਂ ਸਾਰੀਆਂ ਫਾਈਲਾਂ, ਤੁਹਾਡੇ ਨਵੇਂ ਅਤੇ ਅਜੇ ਤੱਕ ਕਮਿਟ ਨਾ ਕੀਤੇ ਕੰਮ ਸਮੇਤ, ਮਿਟਾ ਦੇਵੇਗਾ।