При следующей компоновке модуля:
/path/in/pythonpath/
mymodule/
__init__.py
_mymodule-cpython-37m-darwin.so
В Python 2.7 __init__.py может импортировать .so следующим образом:
import _mymodule
Но в Python 3.7 я обнаружил, что_mymodule не был найден, пока я не добавил каталог mymodule в PYTHONPATH:
PYTHONPATH=/path/in/pythonpath:/path/in/pythonpath/mymodule
Я обнаружил, что этот подход используется в модуле typed_ast, установленном в системе:
...site-packages/typed_ast/
__init__.py
ast3.py
_ast3.cpython-37m-darwin.so
Где ast3.pyимпортировать _ast3 следующим образом:
from typed_ast import _ast3
from typed_ast._ast3 import *
Следование этой модели с mymodule также работает без изменения PYTHONPATH:
from mymodule import _mymodule
from mymodule._mymodule import *
Мой вопрос заключается в том, что изменилось и что нужно сделатьсделать для "mymodule" - и где это определяется? Я не обнаружил, что это явно описано в PEP или в документации Python. Я подозреваю, что это подразумевается в некоторых документах модуля, и я пропустил это.