diff --git a/Doc/Manual/Contents.html b/Doc/Manual/Contents.html index ffb467c35a7..b75da40e3ce 100644 --- a/Doc/Manual/Contents.html +++ b/Doc/Manual/Contents.html @@ -1595,6 +1595,12 @@
Python3 adds another option for packages with PEP 0420 (implicit -namespace packages). These new type of python packages no longer use -__init__.py files. Swig generated python modules support implicit +namespace packages). Implicit namespace packages no longer use +__init__.py files. SWIG generated Python modules support implicit namespace packages. See 36.11.5 Implicit Namespace Packages for more information.
-If you place a swig generated module into a python package then there -are details concerning the way swig +If you place a SWIG generated module into a Python package then there +are details concerning the way SWIG searches for the wrapper module -you may want to familiarize yourself with. +that you may want to familiarize yourself with.
The way Python defines its modules and packages impacts SWIG users. Some @@ -5957,28 +5962,30 @@
-When swig creates wrappers from the interface file foo.i two python modules are -created. There is a pure python module module (foo.py) and C code which is -built and linked into a dynamically (or statically) loaded python module _foo -(see section 36.2 for details). So, the interface -file really defines two python modules. How these two modules are loaded is -covered here. +When SWIG creates wrappers from an interface file, say foo.i, two Python modules are +created. There is a pure Python module module (foo.py) and C/C++ code which is +built and linked into a dynamically (or statically) loaded module _foo +(see the Preliminaries section for details). So, the interface +file really defines two Python modules. How these two modules are loaded is +covered next.
-The pure python module needs to load the companion module in order to link -the python to the wrapped C methods. To do this it must make some assumptions -about what package the companion module may be located in. The method the -python shadow file uses to find the other half is as follows: +The pure Python module needs to load the C/C++ module in order to link +to the wrapped C/C++ methods. To do this it must make some assumptions +about what package the C/C++ module may be located in. The approach the +pure Python module uses to find the C/C++ module is as follows:
foo.py tries to load _foo from the same package foo.py is - located in. The package name is determined from the __name__ - attribute given to foo.py by the python loader that imported +
The pure Python module, foo.py, tries to load the C/C++ module, _foo, from the same package foo.py is + located in. The package name is determined from the __name__ + attribute given to foo.py by the Python loader that imported foo.py. If foo.py is not in a package then _foo is loaded as a global module.
-Here foo.py is the pure python module and _foo is the dynamically or statically -loaded C module. -
-As an example suppose foo.i is compiled into foo.py and _foo.so. Assuming /dir is on PYTHONPATH, then the two modules can be installed and used in the following ways:
-Both modules are in one package:
-/dir/pakage/foo.py +/dir/package/foo.py /dir/package/__init__.py /dir/package/_foo.so@@ -6014,10 +6020,14 @@
The pure python module is in a package and the C/C++ module is global:
-/dir/pakage/foo.py +/dir/package/foo.py /dir/package/__init__.py /dir/_foo.so@@ -6029,7 +6039,11 @@
Both modules are global:
/dir/foo.py @@ -6044,8 +6058,8 @@Both modules are global
-If _foo is statically linked into an embedded python interpreter, then it may or -may not be in a python package. This depends in the exact way the module was +If _foo is statically linked into an embedded Python interpreter, then it may or +may not be in a Python package. This depends in the exact way the module was loaded statically. The above search order will still be used for statically loaded modules. So, one may place the module either globally or in a package as desired.