Импортировать файл из одного каталога вверх - PullRequest
1 голос
/ 29 мая 2019

Я работаю, чтобы импортировать файл из одного каталога вверх.

Fitv/
  __init__.py
  BrowserPool.py
  FitvTests/
    __init__.py
    environment.py

Итак, с описанной выше файловой структурой я хочу импортировать BrowserPool в среду.

Я начал с:

from Fitv.BrowserPool import BrowserPool

И получил это:

  File "..\environment.py", line 4, in <module>
    from Fitv.BrowserPool import BrowserPool
ModuleNotFoundError: No module named 'Fitv'

Глядя на различные источники, я пытался:

from .. import BrowserPool

Я получил это:

  File "..\environment.py", line 3, in <module>
    from .. import BrowserPool
KeyError: "'__name__' not in globals"

Пробовал (используется абсолютный путь):

import os, sys
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath('D:/Dev/Python/Fitv-master-new/Fitv/'))))
from Fitv.BrowserPool import BrowserPool

Got:

  File "..\environment.py", line 3, in <module>
    from Fitv.BrowserPool import BrowserPool
ModuleNotFoundError: No module named 'Fitv'

Пробовал (используется относительный путь):

import sys
sys.path.append('/Fitv-master-new/Fitv/')
from Fitv import BrowserPool

Got:

  File "..\environment.py", line 8, in <module>
    from Fitv import BrowserPool
ModuleNotFoundError: No module named 'Fitv'

Что я делаю не так и как мне это исправить?

1 Ответ

1 голос
/ 29 мая 2019

Импорт в Python всегда зависит от пути, с которого запускается интерпретатор Python, и от пути к environment.py, указанному в вашем трекбеке, который включает ..:

File "..\environment.py", line 8, in <module>

, это очевидночто вы запускаете environment.py из подкаталога под FitvTests, а не из того же каталога, где расположен environment.py, и в этом случае .. в вашем операторе import будет просто ссылаться на FitvTests каталог, а не его родительский каталог, Fitv.

Вы должны либо запустить environment.py из каталога FitvTests, либо, если у вас есть веские основания запускать его из подкаталога, который вы в данный момент запускаетедля этого используйте ... вместо того, чтобы обращаться к каталогу на 2 уровня вверх:

from ...BrowserPool import BrowserPool
...