两个 MWE 展示了当您想 运行 子目录中的文件作为主要文件以进行测试时如何不在 Python 中导入内容
Two MWE's that show how not to import things in Python, when you want to run a file in a subdir as main for testing purposes
好的,图中是两个 MWE 及其失败消息。
换句话说,我不能自然地从同一个子目录导入一个模块,我想 运行 作为主要模块用于测试目的。这是第一张截图。
下一个屏幕截图显示我无法自然地从项目根目录导入子目录模块,我类似地 运行宁作为主要用于测试目的。
视觉效果:
我不想做的是像我在所有项目中所做的那样破解我的方法,例如:
if __name__ == '__main__:
import sys
sys.append('..')
这很不优雅,因为它无法承受更改文件夹结构。
我也试过将空白 __init__.py
放入子目录,还尝试将这些行放入:
from .e import E
似乎没有什么容易的事。当我在导入东西时无法处理基本的文件结构时,这真是一个无赖。
那么永久解决这两个问题的一般修复方法是什么?
文本代码:
<proj root>/d.py
:
class D:
pass
<proj root>/root.py
:
from b.a import A
print("import from project root main")
<proj root>/b/a.py
:
from b.c import C
class A(C):
pass
if __name__ == '__main__':
print('import from project subdir')
<proj root>/b/c.py
:
class C:
pass
<proj root>/b/e.py
:
from d import D
class E(D):
pass
if __name__ == '__main__':
print("e can't import something from root")
首先将入口点设置为 a.py
,对于另一个错误,将入口点设置为 e.py
。
谢谢!
对于第一个错误,您在子目录 b
中创建了一个 __init__.py
,其内容为:
from .c import *
然而,这对根目录不起作用。但我发现的最简洁的方法,无需执行 sys.path.append()
就是打开你的项目属性,并将 ..
精确添加到 Python 路径:
在 WingWare 中:
这样就解决了第二个问题。当您简单地添加 ..
时会出现一个警告,您应该使用绝对路径,但我同意。
如果您在没有 IDE 的情况下工作,只需修改 PYTHONPATH
环境变量。
编码愉快!
好的,图中是两个 MWE 及其失败消息。
换句话说,我不能自然地从同一个子目录导入一个模块,我想 运行 作为主要模块用于测试目的。这是第一张截图。
下一个屏幕截图显示我无法自然地从项目根目录导入子目录模块,我类似地 运行宁作为主要用于测试目的。
视觉效果:
我不想做的是像我在所有项目中所做的那样破解我的方法,例如:
if __name__ == '__main__:
import sys
sys.append('..')
这很不优雅,因为它无法承受更改文件夹结构。
我也试过将空白 __init__.py
放入子目录,还尝试将这些行放入:
from .e import E
似乎没有什么容易的事。当我在导入东西时无法处理基本的文件结构时,这真是一个无赖。
那么永久解决这两个问题的一般修复方法是什么?
文本代码:
<proj root>/d.py
:
class D:
pass
<proj root>/root.py
:
from b.a import A
print("import from project root main")
<proj root>/b/a.py
:
from b.c import C
class A(C):
pass
if __name__ == '__main__':
print('import from project subdir')
<proj root>/b/c.py
:
class C:
pass
<proj root>/b/e.py
:
from d import D
class E(D):
pass
if __name__ == '__main__':
print("e can't import something from root")
首先将入口点设置为 a.py
,对于另一个错误,将入口点设置为 e.py
。
谢谢!
对于第一个错误,您在子目录 b
中创建了一个 __init__.py
,其内容为:
from .c import *
然而,这对根目录不起作用。但我发现的最简洁的方法,无需执行 sys.path.append()
就是打开你的项目属性,并将 ..
精确添加到 Python 路径:
在 WingWare 中:
这样就解决了第二个问题。当您简单地添加 ..
时会出现一个警告,您应该使用绝对路径,但我同意。
如果您在没有 IDE 的情况下工作,只需修改 PYTHONPATH
环境变量。
编码愉快!