0

От Python relative imports for the billionth time:Interactive Python - решения для относительных импорта

  • Для from .. import работать, имя модуля должен иметь по крайней мере столько же точек, сколько в import заявлении.
  • ... если вы запустите интерпретатор в интерактивном режиме ... название этой интерактивной сессии является __main__
  • Таким образом, вы не можете сделать относительно импорта непосредственно из интерактивной сессии

Мне нравится использовать интерактивный Jupyter ноутбук сессий для изучения данных и тестовых модулей перед написанием производственного кода. Чтобы сделать вещи понятными и доступными для товарищей по команде, мне нравится размещать ноутбуки в пакете interactive, расположенном рядом с пакетами и модулями, которые я тестирую.

package/ 

    __init__.py 

    subpackage1/ 

     __init__.py 

     moduleX.py 

     moduleY.py 

     moduleZ.py 

    subpackage2/ 

     __init__.py 

     moduleZ.py 

    interactive/ 
     __init__.py 
     my_notebook.ipynb 

В ходе интерактивной сессии в interactive.my_notebook.ipynb, как бы вы импортировать другие модули, такие как subpackage1.moduleX и subpackage2.moduleZ?

ответ

2

Решение, которое я использую в настоящее время, заключается в том, чтобы добавить родительский пакет к sys.path.

import sys 
sys.path.append("/Users/.../package/") 

import subpackage1.moduleX 
import subpackage2.moduleZ 
+1

Я думаю, что имеет смысл добавить родительский каталог 'package' в' sys.path'. Таким образом, вы всегда можете делать 'из пакета package.subpackageN import moduleZ' – theorifice