3. Налаштувати Python¶
3.1. Налаштувати параметри¶
List all ./configure script options using:
./configure --help
Дивіться також Misc/SpecialBuilds.txt у вихідному дистрибутиві Python.
3.1.1. Загальні параметри¶
-
--enable-loadable-sqlite-extensions¶ Support loadable extensions in the
_sqliteextension module (default is no).Перегляньте метод
sqlite3.Connection.enable_load_extension()модуляsqlite3.Нове в версії 3.6.
-
--disable-ipv6¶ Вимкніть підтримку IPv6 (увімкнено за замовчуванням, якщо підтримується), перегляньте модуль
socket.
-
--enable-big-digits=[15|30]¶ Визначте розмір у бітах цифр Python
int: 15 або 30 біт.By default, the number of bits is selected depending on
sizeof(void*): 30 bits ifvoid*size is 64-bit or larger, 15 bits otherwise.Визначте
PYLONG_BITS_IN_DIGITяк15або30.
-
--with-cxx-main¶
-
--with-cxx-main=COMPILER¶ Compile the Python
main()function and link Python executable with C++ compiler:$CXX, or COMPILER if specified.
-
--with-suffix=SUFFIX¶ Установіть для виконуваного файлу Python суфікс SUFFIX.
The default suffix is
.exeon Windows and macOS (python.exeexecutable), and an empty string on other platforms (pythonexecutable).
-
--with-tzpath=<list of absolute paths separated by pathsep>¶ Select the default time zone search path for
zoneinfo.TZPATH. See the Compile-time configuration of thezoneinfomodule.За замовчуванням:
/usr/share/zoneinfo:/usr/lib/zoneinfo:/usr/share/lib/zoneinfo:/etc/zoneinfo.Дивіться роздільник шляхів
os.pathsep.Нове в версії 3.9.
-
--without-decimal-contextvar¶ Створіть модуль розширення
_decimal, використовуючи локальний контекст потоку, а не локальний контекст співпрограми (за замовчуванням), дивіться модульdecimal.See
decimal.HAVE_CONTEXTVARand thecontextvarsmodule.Нове в версії 3.9.
-
--with-dbmliborder=db1:db2:...¶ Порядок перевизначення, щоб перевірити серверні частини бази даних для модуля
dbmДійсним значенням є розділений двокрапкою (
:) рядок із іменами серверної частини:ndbm;gdbm;bdb.
-
--without-c-locale-coercion¶ Вимкнути приведення локалі C до локалі на основі UTF-8 (увімкнено за умовчанням).
Не визначайте макрос
PY_COERCE_C_LOCALE.Перегляньте
PYTHONCOERCECLOCALEі PEP 538.
-
--with-platlibdir=DIRNAME¶ Ім’я каталогу бібліотеки Python (за замовчуванням –
lib).Fedora та SuSE використовують
lib64на 64-розрядних платформах.Перегляньте
sys.platlibdir.Нове в версії 3.9.
-
--with-wheel-pkg-dir=PATH¶ Каталог пакетів коліс, які використовуються модулем
ensurepip(за умовчанням немає).Some Linux distribution packaging policies recommend against bundling dependencies. For example, Fedora installs wheel packages in the
/usr/share/python-wheels/directory and don’t install theensurepip._bundledpackage.Нове в версії 3.10.
3.1.2. Параметри встановлення¶
-
--prefix=PREFIX¶ Install architecture-independent files in PREFIX. On Unix, it defaults to
/usr/local.This value can be retrived at runtime using
sys.prefix.As an example, one can use
--prefix="$HOME/.local/"to install a Python in its home directory.
-
--exec-prefix=EPREFIX¶ Install architecture-dependent files in EPREFIX, defaults to
--prefix.This value can be retrived at runtime using
sys.exec_prefix.
-
--disable-test-modules¶ Don’t build nor install test modules, like the
testpackage or the_testcapiextension module (built and installed by default).Нове в версії 3.10.
-
--with-ensurepip=[upgrade|install|no]¶ Виберіть команду
ensurepip, запущену під час встановлення Python:оновлення(за замовчуванням): запустіть командуpython -m securepip --altinstall --upgrade.встановити: запустіть командуpython -m securepip --altinstall;ні: не запускати securepip;
Нове в версії 3.6.
3.1.3. Параметри виконання¶
Configuring Python using --enable-optimizations --with-lto (PGO + LTO) is
recommended for best performance.
-
--enable-optimizations¶ Увімкніть керовану оптимізацію профілю (PGO) за допомогою
PROFILE_TASK(вимкнено за умовчанням).Компілятор C Clang вимагає програми
llvm-profdataдля PGO. У macOS GCC також вимагає цього: GCC — це просто псевдонім Clang у macOS.Вимкніть також семантичне вставлення в libpython, якщо
--enable-sharedі GCC використовуються: додайте-fno-semantic-interpositionдо позначок компілятора та компонувальника.Нове в версії 3.6.
Змінено в версії 3.10: Використовуйте
-fno-semantic-interpositionна GCC.
-
PROFILE_TASK¶ Змінна середовища, яка використовується в Makefile: аргументи командного рядка Python для завдання створення PGO.
За замовчуванням:
-m test --pgo --timeout=$(TESTTIMEOUT).Нове в версії 3.8.
-
--with-lto¶ Увімкніть оптимізацію часу підключення (LTO) у будь-якій збірці (за умовчанням вимкнено).
Для компілятора C Clang потрібен
llvm-arдля LTO (arдля macOS), а також компонувальник, що підтримує LTO (ld.goldабоlld).Нове в версії 3.6.
-
--with-computed-gotos¶ Увімкнути обчислені gotos у циклі оцінки (увімкнено за замовчуванням у підтримуваних компіляторах).
-
--without-pymalloc¶ Вимкніть спеціалізований розподільник пам’яті Python pymalloc (увімкнено за замовчуванням).
Дивіться також змінну середовища
PYTHONMALLOC.
-
--without-doc-strings¶ Вимкніть статичні рядки документації, щоб зменшити обсяг пам’яті (увімкнено за замовчуванням). Це не впливає на рядки документації, визначені в Python.
Не визначайте макрос
WITH_DOC_STRINGS.Перегляньте макрос
PyDoc_STRVAR().
-
--enable-profiling¶ Увімкніть профілювання коду рівня C за допомогою
gprof(вимкнено за умовчанням).
3.1.4. Збірка налагодження Python¶
Збірка для налагодження — це Python, створений із параметром налаштування --with-pydebug.
Наслідки збірки налагодження:
Відображати всі попередження за замовчуванням: список стандартних фільтрів попереджень порожній у модулі
warnings.Додайте
dдоsys.abiflags.Add
sys.gettotalrefcount()function.Додайте параметр командного рядка
-X showrefcount.Add
PYTHONTHREADDEBUGenvironment variable.Add support for the
__ltrace__variable: enable low-level tracing in the bytecode evaluation loop if the variable is defined.Встановіть debug хуки на розподільники пам’яті, щоб виявити переповнення буфера та інші помилки пам’яті.
Визначте макроси
Py_DEBUGіPy_REF_DEBUG.Add runtime checks: code surroundeded by
#ifdef Py_DEBUGand#endif. Enableassert(...)and_PyObject_ASSERT(...)assertions: don’t set theNDEBUGmacro (see also the--with-assertionsconfigure option). Main runtime checks:Додайте перевірку правильності аргументів функції.
Об’єкти Unicode та int створюються з пам’яттю, заповненою шаблоном для виявлення використання неініціалізованих об’єктів.
Переконайтеся, що функції, які можуть очистити або замінити поточний виняток, не викликаються з викликом виключення.
Збирач сміття (
gc.collect()функція) запускає деякі базові перевірки узгодженості об’єктів.The
Py_SAFE_DOWNCAST()macro checks for integer underflow and overflow when downcasting from wide types to narrow types.
Дивіться також Режим розробки Python і параметр налаштування --with-trace-refs.
Змінено в версії 3.8: Release builds and debug builds are now ABI compatible: defining the
Py_DEBUG macro no longer implies the Py_TRACE_REFS macro (see the
--with-trace-refs option), which introduces the only ABI
incompatibility.
3.1.5. Параметри налагодження¶
-
--with-pydebug¶ Збірка Python у режимі налагодження: визначте макрос
Py_DEBUG(вимкнено за замовчуванням).
-
--with-trace-refs¶ Увімкнути посилання на трасування для налагодження (вимкнено за умовчанням).
Ефекти:
Визначте макрос
Py_TRACE_REFS.Додайте функцію
sys.getobjects().Додайте змінну середовища
PYTHONDUMPREFS.
This build is not ABI compatible with release build (default build) or debug build (
Py_DEBUGandPy_REF_DEBUGmacros).Нове в версії 3.8.
-
--with-assertions¶ Збірка з увімкненими твердженнями C (за замовчуванням ні):
assert(...);і_PyObject_ASSERT(...);.Якщо встановлено, макрос
NDEBUGне визначено в змінній компілятораOPT.Дивіться також опцію
--with-pydebug(debug build), яка також вмикає твердження.Нове в версії 3.6.
-
--with-valgrind¶ Увімкнути підтримку Valgrind (за замовчуванням ні).
-
--with-dtrace¶ Увімкнути підтримку DTrace (за замовчуванням ні).
Перегляньте Інструментування CPython за допомогою DTrace і SystemTap.
Нове в версії 3.6.
-
--with-address-sanitizer¶ Увімкнути детектор помилок пам’яті AddressSanitizer,
asan(за умовчанням ні).Нове в версії 3.6.
-
--with-memory-sanitizer¶ Увімкнути детектор помилок розподілу MemorySanitizer,
msan(за умовчанням ні).Нове в версії 3.6.
-
--with-undefined-behavior-sanitizer¶ Увімкнути невизначений детектор поведінки UndefinedBehaviorSanitizer,
ubsan(за умовчанням ні).Нове в версії 3.6.
3.1.6. Параметри компонувальника¶
Увімкнути створення спільної бібліотеки Python:
libpython(за замовчуванням ні).
-
--without-static-libpython¶ Не створюйте
libpythonMAJOR.MINOR.aі не встановлюйтеpython.o(зібрано та ввімкнено за замовчуванням).Нове в версії 3.10.
3.1.7. Параметри бібліотек¶
-
--with-libs='lib1 ...'¶ Посилання на додаткові бібліотеки (за замовчуванням ні).
-
--with-system-expat¶ Build the
pyexpatmodule using an installedexpatlibrary (default is no).
-
--with-system-ffi¶ Build the
_ctypesextension module using an installedffilibrary, see thectypesmodule (default is system-dependent).
-
--with-system-libmpdec¶ Build the
_decimalextension module using an installedmpdeclibrary, see thedecimalmodule (default is no).Нове в версії 3.3.
-
--with-readline=editline¶ Use
editlinelibrary for backend of thereadlinemodule.Define the
WITH_EDITLINEmacro.Нове в версії 3.10.
-
--without-readline¶ Не створюйте модуль
readline(створено за замовчуванням).Не визначайте макрос
HAVE_LIBREADLINE.Нове в версії 3.10.
-
--with-tcltk-includes='-I...'¶ Override search for Tcl and Tk include files.
-
--with-tcltk-libs='-L...'¶ Override search for Tcl and Tk libraries.
-
--with-libm=STRING¶ Замінити математичну бібліотеку
libmна STRING (за замовчуванням залежить від системи).
-
--with-libc=STRING¶ Замінити бібліотеку C
libcна STRING (за замовчуванням залежить від системи).
-
--with-openssl=DIR¶ Корінь каталогу OpenSSL.
Нове в версії 3.7.
-
--with-openssl-rpath=[no|auto|DIR]¶ Встановити каталог бібліотеки середовища виконання (rpath) для бібліотек OpenSSL:
ні(за замовчуванням): не встановлювати rpath;auto: автоматичне визначення rpath з--with-opensslіpkg-config;DIR: встановити явний rpath.
Нове в версії 3.10.
3.1.8. Параметри безпеки¶
-
--with-hash-algorithm=[fnv|siphash24]¶ Виберіть алгоритм хешування для використання в
Python/pyhash.c:siphash24(default).fnv;
Нове в версії 3.4.
-
--with-builtin-hashlib-hashes=md5,sha1,sha256,sha512,sha3,blake2¶ Вбудовані хеш-модулі:
md5;sha1;sha256;sha512;sha3(зі струшуванням);blake2.
Нове в версії 3.9.
-
--with-ssl-default-suites=[python|openssl|STRING]¶ Перевизначте стандартний рядок наборів шифрів OpenSSL:
python(за замовчуванням): використовувати пріоритетний вибір Python;openssl: залишити стандартні параметри OpenSSL без змін;STRING: використовуйте спеціальний рядок
Перегляньте модуль
ssl.Нове в версії 3.7.
Змінено в версії 3.10: Налаштування
pythonі STRING також встановлюють TLS 1.2 як мінімальну версію протоколу.
3.1.9. Параметри macOS¶
See Mac/README.rst.
-
--enable-universalsdk¶
-
--enable-universalsdk=SDKDIR¶ Створіть універсальну двійкову збірку. SDKDIR визначає, який macOS SDK слід використовувати для виконання збірки (за замовчуванням ні).
-
--enable-framework¶
-
--enable-framework=INSTALLDIR¶ Створіть Python.framework замість традиційної інсталяції Unix. Додатково INSTALLDIR визначає шлях інсталяції (за замовчуванням ні).
-
--with-universal-archs=ARCH¶ Укажіть тип універсального двійкового файлу, який потрібно створити. Цей параметр дійсний, лише якщо встановлено
--enable-universalsdk.Опції:
universal2;32-bit;64-bit;3-way;intel;intel-32;intel-64;all.
-
--with-framework-name=FRAMEWORK¶ Укажіть назву для фреймворку python у macOS, дійсну лише тоді, коли встановлено
--enable-framework(за замовчуванням:Python).
3.2. Система збірки Python¶
3.2.1. Основні файли системи збірки¶
configure.ac=>configure;Makefile.pre.in=>Makefile(створенийconfigure);pyconfig.h(створенийconfigure);Modules/Setup: розширення C, створені Makefile за допомогою сценарію оболонкиModule/makesetup;setup.py: C extensions built using thedistutilsmodule.
3.2.2. Основні етапи побудови¶
Файли C (
.c) створюються як об’єктні файли (.o).Статична бібліотека libpython (
.a) створюється з файлів об’єктів.python.oі статична бібліотекаlibpythonпов’язані в остаточну програмуpython.C extensions are built by the Makefile (see
Modules/Setup) andpython setup.py build.
3.2.3. Основні цілі Makefile¶
make: Build Python with the standard library.make platform:: build thepythonprogram, but don’t build the standard library extension modules.make profile-opt: build Python using Profile Guided Optimization (PGO). You can use the configure--enable-optimizationsoption to make this the default target of themakecommand (make allor justmake).make buildbottest: Build Python and run the Python test suite, the same way than buildbots test Python. SetTESTTIMEOUTvariable (in seconds) to change the test timeout (1200 by default: 20 minutes).make install: Build and install Python.make regen-all: Regenerate (almost) all generated files;make regen-stdlib-module-namesandautoconfmust be run separately for the remaining generated files.make clean: Remove built files.make distclean: Same thanmake clean, but remove also files created by the configure script.
3.2.4. C розширення¶
Some C extensions are built as built-in modules, like the sys module.
They are built with the Py_BUILD_CORE_BUILTIN macro defined.
Built-in modules have no __file__ attribute:
>>> import sys
>>> sys
<module 'sys' (built-in)>
>>> sys.__file__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: module 'sys' has no attribute '__file__'
Other C extensins are built as dynamic libraries, like the _asyncio module.
They are built with the Py_BUILD_CORE_MODULE macro defined.
Example on 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 використовується для створення цілей Makefile для створення розширень C. На початку файлів розширення C побудовані як вбудовані модулі. Розширення, визначені після маркера *shared*, будуються як динамічні бібліотеки.
The setup.py script only builds C extensions as shared libraries using
the distutils module.
The PyAPI_FUNC(), PyAPI_API() and
PyMODINIT_FUNC() macros of Include/pyport.h are defined
differently depending if the Py_BUILD_CORE_MODULE macro is defined:
Використовуйте
Py_EXPORTED_SYMBOL, якщоPy_BUILD_CORE_MODULEвизначеноВ іншому випадку використовуйте
Py_IMPORTED_SYMBOL.
If the Py_BUILD_CORE_BUILTIN macro is used by mistake on a C extension
built as a shared library, its PyInit_xxx() function is not exported,
causing an ImportError on import.
3.3. Прапори компілятора та компонувальника¶
Параметри, встановлені сценарієм ./configure і змінними середовища та використовуються Makefile.
3.3.1. Прапори препроцесора¶
-
CONFIGURE_CPPFLAGS¶ Значення змінної
CPPFLAGSпередається до сценарію./configure.Нове в версії 3.6.
-
CPPFLAGS¶ (Objective) C/C++ preprocessor flags, e.g.
-I<include dir>if you have headers in a nonstandard directory<include dir>.Both
CPPFLAGSandLDFLAGSneed to contain the shell’s value for setup.py to be able to build extension modules using the directories specified in the environment variables.
-
BASECPPFLAGS¶ Нове в версії 3.4.
-
PY_CPPFLAGS¶ Для побудови об’єктних файлів інтерпретатора додано додаткові позначки препроцесора.
Типове значення:
$(BASECPPFLAGS) -I. -I$(srcdir)/Включити $(CONFIGURE_CPPFLAGS) $(CPPFLAGS).Нове в версії 3.2.
3.3.2. Прапори компілятора¶
-
CC¶ Команда компілятора C.
Приклад:
gcc -pthread.
-
MAINCC¶ C compiler command used to build the
main()function of programs likepython.Variable set by the
--with-cxx-mainoption of the configure script.Default:
$(CC).
-
CXX¶ Команда компілятора C++.
Used if the
--with-cxx-mainoption is used.Приклад:
g++ -pthread.
-
CFLAGS¶ Прапори компілятора C.
-
CFLAGS_NODIST¶ CFLAGS_NODISTis used for building the interpreter and stdlib C extensions. Use it when a compiler flag should not be part of the distutilsCFLAGSonce Python is installed (bpo-21121).In particular,
CFLAGSshould not contain:the compiler flag
-I(for setting the search path for include files). The-Iflags are processed from left to right, and any flags inCFLAGSwould take precedence over user- and package-supplied-Iflags.hardening flags such as
-Werrorbecause distributions cannot control whether packages installed by users conform to such heightened standards.
Нове в версії 3.5.
-
EXTRA_CFLAGS¶ Додаткові позначки компілятора C.
-
CONFIGURE_CFLAGS_NODIST¶ Значення змінної
CFLAGS_NODISTпередається до сценарію./configure.Нове в версії 3.5.
-
BASECFLAGS¶ Базові прапори компілятора.
-
OPT¶ Прапори оптимізації.
-
CFLAGS_ALIASING¶ Суворі або нестрогі прапорці псевдонімів, які використовуються для компіляції
Python/dtoa.c.Нове в версії 3.7.
-
CCSHARED¶ Прапори компілятора, які використовуються для створення спільної бібліотеки.
Наприклад,
-fPICвикористовується в Linux і BSD.
-
CFLAGSFORSHARED¶ Для побудови об’єктних файлів інтерпретатора додано додаткові позначки C.
Типове значення:
$(CCSHARED), коли--enable-sharedвикористовується, або порожній рядок в інших випадках.
-
PY_CFLAGS¶ Типове значення:
$(BASECFLAGS) $(OPT) $(CONFIGURE_CFLAGS) $(CFLAGS) $(EXTRA_CFLAGS).
-
PY_CFLAGS_NODIST¶ Типове значення:
$(CONFIGURE_CFLAGS_NODIST) $(CFLAGS_NODIST) -I$(srcdir)/Include/internal.Нове в версії 3.5.
-
PY_STDMODULE_CFLAGS¶ Прапорці C, які використовуються для побудови об’єктних файлів інтерпретатора.
Типове значення:
$(PY_CFLAGS) $(PY_CFLAGS_NODIST) $(PY_CPPFLAGS) $(CFLAGSFORSHARED).Нове в версії 3.7.
-
PY_CORE_CFLAGS¶ Типове значення:
$(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE.Нове в версії 3.2.
-
PY_BUILTIN_MODULE_CFLAGS¶ Прапори компілятора для створення стандартного модуля розширення бібліотеки як вбудованого модуля, як-от модуль
posix.Типове значення:
$(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE_BUILTIN.Нове в версії 3.8.
-
PURIFY¶ Команда очищення. Purify — це програма для налагодження пам’яті.
За замовчуванням: порожній рядок (не використовується).
3.3.3. Прапори компонувальника¶
-
LINKCC¶ Команда компонувальника, яка використовується для створення таких програм, як
pythonі_testembed.Default:
$(PURIFY) $(MAINCC).
-
CONFIGURE_LDFLAGS¶ Значення змінної
LDFLAGSпередається до сценарію./configure.Уникайте призначення
CFLAGS,LDFLAGSтощо, щоб користувачі могли використовувати їх у командному рядку для додавання до цих значень без порушення попередньо встановлених значень.Нове в версії 3.2.
-
LDFLAGS_NODIST¶ LDFLAGS_NODISTis used in the same manner asCFLAGS_NODIST. Use it when a linker flag should not be part of the distutilsLDFLAGSonce Python is installed (bpo-35257).In particular,
LDFLAGSshould not contain:the compiler flag
-L(for setting the search path for libraries). The-Lflags are processed from left to right, and any flags inLDFLAGSwould take precedence over user- and package-supplied-Lflags.
-
CONFIGURE_LDFLAGS_NODIST¶ Значення змінної
LDFLAGS_NODISTпередається до сценарію./configure.Нове в версії 3.8.
-
LDFLAGS¶ Linker flags, e.g.
-L<lib dir>if you have libraries in a nonstandard directory<lib dir>.Both
CPPFLAGSandLDFLAGSneed to contain the shell’s value for setup.py to be able to build extension modules using the directories specified in the environment variables.
-
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).Нове в версії 3.8.
-
PY_CORE_LDFLAGS¶ Прапори компонувальника, які використовуються для створення файлів об’єктів інтерпретатора.
Нове в версії 3.8.