55
55
PYBIND11_TOSTRING (name), PYBIND11_CONCAT(pybind11_init_impl_, name)); \
56
56
void PYBIND11_CONCAT (pybind11_init_, name)(::pybind11::module_ \
57
57
& variable) // NOLINT(bugprone-macro-parentheses)
58
- #define PYBIND11_PYCONFIG_SUPPORT_PY_VERSION_HEX (0x03080000 )
59
58
60
59
PYBIND11_NAMESPACE_BEGIN(PYBIND11_NAMESPACE)
61
60
PYBIND11_NAMESPACE_BEGIN(detail)
@@ -93,37 +92,11 @@ inline void precheck_interpreter() {
93
92
}
94
93
}
95
94
96
- PYBIND11_NAMESPACE_END (detail)
95
+ #if !defined(PYBIND11_PYCONFIG_SUPPORT_PY_VERSION_HEX)
96
+ # define PYBIND11_PYCONFIG_SUPPORT_PY_VERSION_HEX (0x03080000 )
97
+ #endif
97
98
98
- #if PY_VERSION_HEX >= PYBIND11_PYCONFIG_SUPPORT_PY_VERSION_HEX
99
- inline void initialize_interpreter (PyConfig *config,
100
- int argc = 0 ,
101
- const char *const *argv = nullptr ,
102
- bool add_program_dir_to_path = true ) {
103
- detail::precheck_interpreter ();
104
- PyStatus status = PyConfig_SetBytesArgv (config, argc, const_cast <char *const *>(argv));
105
- if (PyStatus_Exception (status) != 0 ) {
106
- // A failure here indicates a character-encoding failure or the python
107
- // interpreter out of memory. Give up.
108
- PyConfig_Clear (config);
109
- throw std::runtime_error (PyStatus_IsError (status) != 0 ? status.err_msg
110
- : " Failed to prepare CPython" );
111
- }
112
- status = Py_InitializeFromConfig (config);
113
- if (PyStatus_Exception (status) != 0 ) {
114
- PyConfig_Clear (config);
115
- throw std::runtime_error (PyStatus_IsError (status) != 0 ? status.err_msg
116
- : " Failed to init CPython" );
117
- }
118
- if (add_program_dir_to_path) {
119
- PyRun_SimpleString (" import sys, os.path; "
120
- " sys.path.insert(0, "
121
- " os.path.abspath(os.path.dirname(sys.argv[0])) "
122
- " if sys.argv and os.path.exists(sys.argv[0]) else '')" );
123
- }
124
- PyConfig_Clear (config);
125
- }
126
- #else
99
+ #if PY_VERSION_HEX < PYBIND11_PYCONFIG_SUPPORT_PY_VERSION_HEX
127
100
inline void initialize_interpreter_pre_pyconfig (bool init_signal_handlers,
128
101
int argc,
129
102
const char *const *argv,
@@ -162,6 +135,38 @@ inline void initialize_interpreter_pre_pyconfig(bool init_signal_handlers,
162
135
}
163
136
#endif
164
137
138
+ PYBIND11_NAMESPACE_END (detail)
139
+
140
+ #if PY_VERSION_HEX >= PYBIND11_PYCONFIG_SUPPORT_PY_VERSION_HEX
141
+ inline void initialize_interpreter (PyConfig *config,
142
+ int argc = 0 ,
143
+ const char *const *argv = nullptr ,
144
+ bool add_program_dir_to_path = true ) {
145
+ detail::precheck_interpreter ();
146
+ PyStatus status = PyConfig_SetBytesArgv (config, argc, const_cast <char *const *>(argv));
147
+ if (PyStatus_Exception (status) != 0 ) {
148
+ // A failure here indicates a character-encoding failure or the python
149
+ // interpreter out of memory. Give up.
150
+ PyConfig_Clear (config);
151
+ throw std::runtime_error (PyStatus_IsError (status) != 0 ? status.err_msg
152
+ : " Failed to prepare CPython" );
153
+ }
154
+ status = Py_InitializeFromConfig (config);
155
+ if (PyStatus_Exception (status) != 0 ) {
156
+ PyConfig_Clear (config);
157
+ throw std::runtime_error (PyStatus_IsError (status) != 0 ? status.err_msg
158
+ : " Failed to init CPython" );
159
+ }
160
+ if (add_program_dir_to_path) {
161
+ PyRun_SimpleString (" import sys, os.path; "
162
+ " sys.path.insert(0, "
163
+ " os.path.abspath(os.path.dirname(sys.argv[0])) "
164
+ " if sys.argv and os.path.exists(sys.argv[0]) else '')" );
165
+ }
166
+ PyConfig_Clear (config);
167
+ }
168
+ #endif
169
+
165
170
/* * \rst
166
171
Initialize the Python interpreter. No other pybind11 or CPython API functions can be
167
172
called before this is done; with the exception of `PYBIND11_EMBEDDED_MODULE`. The
@@ -186,7 +191,8 @@ inline void initialize_interpreter(bool init_signal_handlers = true,
186
191
const char *const *argv = nullptr ,
187
192
bool add_program_dir_to_path = true ) {
188
193
#if PY_VERSION_HEX < PYBIND11_PYCONFIG_SUPPORT_PY_VERSION_HEX
189
- initialize_interpreter_pre_pyconfig (init_signal_handlers, argc, argv, add_program_dir_to_path);
194
+ detail::initialize_interpreter_pre_pyconfig (
195
+ init_signal_handlers, argc, argv, add_program_dir_to_path);
190
196
#else
191
197
PyConfig config;
192
198
PyConfig_InitIsolatedConfig (&config);
0 commit comments