能否从主文件所在的目录外导入一个Python文件?

3

我有一个文件结构,看起来像这样:

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

我想从Processer.py导入errors.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]

编辑:算了!我解决了!我只需要将..添加到sys.path中即可!或者如果..无法解决您的问题,可以使用.。但是,如果这些方法都无法解决您的问题:使用一些pathlib(从python3.4开始)的魔力,执行以下操作:

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

或者,如果你想使用os:(取自这个 StackOverflow 答案)

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

有点像……现在,该目录中的任何Python模块或子目录都可以导入,因此您必须小心放置内容。如果您正在使用源代码控制并希望检出多个模块版本,则生活会变得棘手。最终,随着项目的发展,它需要可安装性,disutils页面是一个很好的起点。 - tdelaney
1个回答

2
我解决了!我需要将..添加到sys.path中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接