mirror of
https://github.com/python/cpython.git
synced 2025-07-07 19:35:27 +00:00
gh-135966: Modify iOS testbed to make app_packages a site directory (#135967)
The iOS testbed now treats the app_packages folder as a site folder. This ensures it is on the path, but also ensures any .pth files are processed on app startup.
This commit is contained in:
parent
34ce1920ca
commit
b38810bab7
3 changed files with 51 additions and 14 deletions
|
@ -298,9 +298,9 @@ To add Python to an iOS Xcode project:
|
||||||
* Signal handlers (:c:member:`PyConfig.install_signal_handlers`) are *enabled*;
|
* Signal handlers (:c:member:`PyConfig.install_signal_handlers`) are *enabled*;
|
||||||
* System logging (:c:member:`PyConfig.use_system_logger`) is *enabled*
|
* System logging (:c:member:`PyConfig.use_system_logger`) is *enabled*
|
||||||
(optional, but strongly recommended; this is enabled by default);
|
(optional, but strongly recommended; this is enabled by default);
|
||||||
* ``PYTHONHOME`` for the interpreter is configured to point at the
|
* :envvar:`PYTHONHOME` for the interpreter is configured to point at the
|
||||||
``python`` subfolder of your app's bundle; and
|
``python`` subfolder of your app's bundle; and
|
||||||
* The ``PYTHONPATH`` for the interpreter includes:
|
* The :envvar:`PYTHONPATH` for the interpreter includes:
|
||||||
|
|
||||||
- the ``python/lib/python3.X`` subfolder of your app's bundle,
|
- the ``python/lib/python3.X`` subfolder of your app's bundle,
|
||||||
- the ``python/lib/python3.X/lib-dynload`` subfolder of your app's bundle, and
|
- the ``python/lib/python3.X/lib-dynload`` subfolder of your app's bundle, and
|
||||||
|
@ -324,7 +324,12 @@ modules in your app, some additional steps will be required:
|
||||||
the ``lib-dynload`` folder can be copied and adapted for this purpose.
|
the ``lib-dynload`` folder can be copied and adapted for this purpose.
|
||||||
|
|
||||||
* If you're using a separate folder for third-party packages, ensure that folder
|
* If you're using a separate folder for third-party packages, ensure that folder
|
||||||
is included as part of the ``PYTHONPATH`` configuration in step 10.
|
is included as part of the :envvar:`PYTHONPATH` configuration in step 10.
|
||||||
|
|
||||||
|
* If any of the folders that contain third-party packages will contain ``.pth``
|
||||||
|
files, you should add that folder as a *site directory* (using
|
||||||
|
:meth:`site.addsitedir`), rather than adding to :envvar:`PYTHONPATH` or
|
||||||
|
:attr:`sys.path` directly.
|
||||||
|
|
||||||
Testing a Python package
|
Testing a Python package
|
||||||
------------------------
|
------------------------
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
The iOS testbed now handles the ``app_packages`` folder as a site directory.
|
|
@ -15,6 +15,11 @@
|
||||||
PyStatus status;
|
PyStatus status;
|
||||||
PyPreConfig preconfig;
|
PyPreConfig preconfig;
|
||||||
PyConfig config;
|
PyConfig config;
|
||||||
|
PyObject *app_packages_path;
|
||||||
|
PyObject *method_args;
|
||||||
|
PyObject *result;
|
||||||
|
PyObject *site_module;
|
||||||
|
PyObject *site_addsitedir_attr;
|
||||||
PyObject *sys_module;
|
PyObject *sys_module;
|
||||||
PyObject *sys_path_attr;
|
PyObject *sys_path_attr;
|
||||||
NSArray *test_args;
|
NSArray *test_args;
|
||||||
|
@ -111,6 +116,43 @@
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Add app_packages as a site directory. This both adds to sys.path,
|
||||||
|
// and ensures that any .pth files in that directory will be executed.
|
||||||
|
site_module = PyImport_ImportModule("site");
|
||||||
|
if (site_module == NULL) {
|
||||||
|
XCTFail(@"Could not import site module");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
site_addsitedir_attr = PyObject_GetAttrString(site_module, "addsitedir");
|
||||||
|
if (site_addsitedir_attr == NULL || !PyCallable_Check(site_addsitedir_attr)) {
|
||||||
|
XCTFail(@"Could not access site.addsitedir");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
path = [NSString stringWithFormat:@"%@/app_packages", resourcePath, nil];
|
||||||
|
NSLog(@"App packages path: %@", path);
|
||||||
|
wtmp_str = Py_DecodeLocale([path UTF8String], NULL);
|
||||||
|
app_packages_path = PyUnicode_FromWideChar(wtmp_str, wcslen(wtmp_str));
|
||||||
|
if (app_packages_path == NULL) {
|
||||||
|
XCTFail(@"Could not convert app_packages path to unicode");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
PyMem_RawFree(wtmp_str);
|
||||||
|
|
||||||
|
method_args = Py_BuildValue("(O)", app_packages_path);
|
||||||
|
if (method_args == NULL) {
|
||||||
|
XCTFail(@"Could not create arguments for site.addsitedir");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = PyObject_CallObject(site_addsitedir_attr, method_args);
|
||||||
|
if (result == NULL) {
|
||||||
|
XCTFail(@"Could not add app_packages directory using site.addsitedir");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add test code to sys.path
|
||||||
sys_module = PyImport_ImportModule("sys");
|
sys_module = PyImport_ImportModule("sys");
|
||||||
if (sys_module == NULL) {
|
if (sys_module == NULL) {
|
||||||
XCTFail(@"Could not import sys module");
|
XCTFail(@"Could not import sys module");
|
||||||
|
@ -123,17 +165,6 @@
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add the app packages path
|
|
||||||
path = [NSString stringWithFormat:@"%@/app_packages", resourcePath, nil];
|
|
||||||
NSLog(@"App packages path: %@", path);
|
|
||||||
wtmp_str = Py_DecodeLocale([path UTF8String], NULL);
|
|
||||||
failed = PyList_Insert(sys_path_attr, 0, PyUnicode_FromString([path UTF8String]));
|
|
||||||
if (failed) {
|
|
||||||
XCTFail(@"Unable to add app packages to sys.path");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
PyMem_RawFree(wtmp_str);
|
|
||||||
|
|
||||||
path = [NSString stringWithFormat:@"%@/app", resourcePath, nil];
|
path = [NSString stringWithFormat:@"%@/app", resourcePath, nil];
|
||||||
NSLog(@"App path: %@", path);
|
NSLog(@"App path: %@", path);
|
||||||
wtmp_str = Py_DecodeLocale([path UTF8String], NULL);
|
wtmp_str = Py_DecodeLocale([path UTF8String], NULL);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue