使python3包既可导入又可运行

使python3包既可导入又可运行,python,python-3.x,Python,Python 3.x,我正在将一些旧脚本从PythonV2.7转换到v3.6,我想做的一件事是有一个包,它可以(a)导入以向其他脚本公开内部工作,但也可以(b)从命令行运行以典型方式运行 在python2中,这并不困难——我使用了一个_init__uuuuuuu.py文件(用于导入)和一个_uuumain_uuuuuuuuu.py文件(用于运行)。但在python3中,这似乎不起作用——例如,以最小的包为例: minimal/ __init.py__ __main.py__ func.py func2

我正在将一些旧脚本从PythonV2.7转换到v3.6,我想做的一件事是有一个包,它可以(a)导入以向其他脚本公开内部工作,但也可以(b)从命令行运行以典型方式运行

在python2中,这并不困难——我使用了一个_init__uuuuuuu.py文件(用于导入)和一个_uuumain_uuuuuuuuu.py文件(用于运行)。但在python3中,这似乎不起作用——例如,以最小的包为例:

minimal/
  __init.py__
  __main.py__
  func.py
  func2.py
__初始值

__主管道

func.py

func2.py

如果我打开python并键入
import minimal
,效果很好,但是如果从命令行键入
python minimal/
我会得到错误:

ImportError: attempted relative import with no known parent package
ModuleNotFoundError: No module named 'func2'
这出现在func.py的第1行,在func2的导入处。如果我从该行中删除句点,而不是func2 import add2中的
,那么我可以从命令行运行
python minimal/
。但是,当我尝试打开python并运行
import minimal
时,在同一行我得到了错误:

ImportError: attempted relative import with no known parent package
ModuleNotFoundError: No module named 'func2'

我知道在包内导入需要一段时间,但是有没有办法在主脚本中也实现这一点?或者另一个允许导入和运行的包结构?

将项目结构更改为:

minimal_cmd/
├── __main__.py
└── minimal
    ├── __init__.py
    ├── func.py
    └── func2.py
并在
\uuuu main\uuuuu.py
中执行完全限定的导入:

if __name__ == '__main__':

    from minimal.func import f

    f(1)
从命令行调用:

$ python minimal_cmd
3
minimal
是当前工作目录或包位于PYTHONPATH上时导入:

>>> import minimal
>>> minimal.f(2)
4

某种程度上。。。这意味着我不能有一个既可以运行又可以导入的包,但似乎将主功能移出是唯一可行的解决方法。谢谢
$ python minimal_cmd
3
>>> import minimal
>>> minimal.f(2)
4