我正在将一些旧的脚本从pythonv2.7转换到v3.6,我想做的一件事是有一个包,它可以(a)被导入以将内部工作暴露给其他脚本,但是(b)可以从命令行运行,以典型的方式运行。你知道吗
在python2中,这并不难——我使用了一个uu init_uuuuuuuuuuuuuy.py文件(用于导入)和一个uuuu main_uuuuuuuuuuuuuy.py文件(用于运行)。但在python3中,这似乎不起作用——例如,以最小的包为例:
minimal/
__init.py__
__main.py__
func.py
func2.py
初始值
from .func import f
from .func2 import add2
主屏幕
from func import f
f(1)
职能部门
from .func2 import add2
def f(x):
print(add2(x))
func2.py
def add2(x):
return x + 2
如果我打开python并键入import minimal
,这很正常,但是如果从命令行键入python minimal/
,我会得到错误:
ImportError: attempted relative import with no known parent package
这出现在第1行职能部门,位于func2的import
。如果我从该行中删除句点,使其成为from func2 import add2
,那么我可以从命令行运行python minimal/
。但是当我试图打开python并运行import minimal
时,在同一行中我得到了错误:
ModuleNotFoundError: No module named 'func2'
我知道包内导入需要一段时间,但是有没有办法在主脚本中也可以这样做呢?或者另一个允许导入和运行的包结构?你知道吗
将项目结构更改为:
并在
__main__.py
中执行完全限定的导入:从命令行调用:
当
minimal
是当前工作目录或包位于PYTHONPATH上时导入:相关问题 更多 >
编程相关推荐