Можно ли импортировать файл python из-за пределов каталога, в котором находится основной файл? - PullRequest
3 голосов
/ 14 июля 2020

У меня есть файловая структура, которая выглядит следующим образом:

Liquid
|
[Truncate]
|_General_parsing
[Truncate]
.....|_'__init__.py'
.....|_'Processer.py'
.....|'TOKENIZER.py'
|_'__init__.py'
|_'errors.py'
[Truncate]

Я хочу импортировать errors.py из Processer.py. Это возможно? Я пытался использовать это:

from ..errors import *; error_manager = errorMaster()

Что вызывает это:

Traceback (most recent call last):
  File "/Users/MYNAME/projects/Liquid/General_parsing/Processer.py", line 17, in <module>
    from ..errors import *; error_manager = errorMaster()
ImportError: attempted relative import with no known parent package
[Finished in 0.125s]

Я видел этот пост , но это не помогает, даже если он попытается решить ту же ImportError. Этот тоже не является (по крайней мере, пока я его не редактировал), поскольку я пробовал:

import sys
sys.path.insert(1, '../Liquid')
from errors import *; error_manager = errorMaster()

Это дает


Traceback (most recent call last):
  File "/Users/MYNAME/projects/Liquid/General_parsing/Processer.py", line 19, in <module>
    from errors import *; error_manager = errorMaster()
ModuleNotFoundError: No module named 'errors'
[Finished in 0.162s]

EDIT: Nevermind! Я решил это! Мне просто нужно добавить .. в sys.path! Или ., если .. не решает вашу проблему. Но , если это не решает вашу проблему: используйте pathlib (пришло python3 .4 +) magi c и выполните:

from pathlib import Path
import sys
sys.path.insert(0, str(Path(__file__).parent))

или, если вы хотите использовать os: (получено из this StackOverflow answer)

import os
os.path.join(os.path.dirname(__file__), '..')

1 Ответ

2 голосов
/ 14 июля 2020

Я решил! Мне нужно добавить .. в sys.path вместо

...