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
_sqlite
extension 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
.exe
on Windows and macOS (python.exe
executable), and an empty string on other platforms (python
executable).
-
--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 thezoneinfo
module.За замовчуванням:
/usr/share/zoneinfo:/usr/lib/zoneinfo:/usr/share/lib/zoneinfo:/etc/zoneinfo
.Дивіться роздільник шляхів
os.pathsep
.Нове в версії 3.9.
-
--without-decimal-contextvar
¶
Створіть модуль розширення
_decimal
, використовуючи локальний контекст потоку, а не локальний контекст співпрограми (за замовчуванням), дивіться модульdecimal
.See
decimal.HAVE_CONTEXTVAR
and thecontextvars
module.Нове в версії 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._bundled
package.Нове в версії 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
test
package or the_testcapi
extension 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
PYTHONTHREADDEBUG
environment 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_DEBUG
and#endif
. Enableassert(...)
and_PyObject_ASSERT(...)
assertions: don’t set theNDEBUG
macro (see also the--with-assertions
configure 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_DEBUG
andPy_REF_DEBUG
macros).Нове в версії 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
pyexpat
module using an installedexpat
library (default is no).
-
--with-system-ffi
¶
Build the
_ctypes
extension module using an installedffi
library, see thectypes
module (default is system-dependent).
-
--with-system-libmpdec
¶
Build the
_decimal
extension module using an installedmpdec
library, see thedecimal
module (default is no).Нове в версії 3.3.
-
--with-readline
=editline
¶ Use
editline
library for backend of thereadline
module.Define the
WITH_EDITLINE
macro.Нове в версії 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 thedistutils
module.
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 thepython
program, 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-optimizations
option to make this the default target of themake
command (make all
or justmake
).make buildbottest
: Build Python and run the Python test suite, the same way than buildbots test Python. SetTESTTIMEOUT
variable (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-names
andautoconf
must 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
CPPFLAGS
andLDFLAGS
need 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-main
option of the configure script.Default:
$(CC)
.
-
CXX
¶ Команда компілятора C++.
Used if the
--with-cxx-main
option is used.Приклад:
g++ -pthread
.
-
CFLAGS
¶ Прапори компілятора C.
-
CFLAGS_NODIST
¶ CFLAGS_NODIST
is used for building the interpreter and stdlib C extensions. Use it when a compiler flag should not be part of the distutilsCFLAGS
once Python is installed (bpo-21121).In particular,
CFLAGS
should not contain:the compiler flag
-I
(for setting the search path for include files). The-I
flags are processed from left to right, and any flags inCFLAGS
would take precedence over user- and package-supplied-I
flags.hardening flags such as
-Werror
because 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_NODIST
is used in the same manner asCFLAGS_NODIST
. Use it when a linker flag should not be part of the distutilsLDFLAGS
once Python is installed (bpo-35257).In particular,
LDFLAGS
should not contain:the compiler flag
-L
(for setting the search path for libraries). The-L
flags are processed from left to right, and any flags inLDFLAGS
would take precedence over user- and package-supplied-L
flags.
-
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
CPPFLAGS
andLDFLAGS
need 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.