2

我有一个具有以下结构的包:

my_package
 |-- src
 |    |-- __init.py__
 |    |-- __main.py__
 |    |-- foo.py
 |    |-- bar.py
 |-- setup.py

我正在尝试在main.py中导入 foo 和 bar ,但它在使用来自终端的命令python my_package执行时给出了ModuleNotFoundError ,但使用来自my_package目录的命令python -m src运行得非常好。我想排除 -m 标志。我在互联网上找到的所有材料都指向两件事

  • 将包位置设置为 sys.path。
  • 将包位置设置为 PYTHONPATH 变量。

我做了这两件事,但到目前为止没有一个对我有用。

编辑:正如评论中所建议的,包装器是合适的解决方案。但我无法弄清楚那里有什么逻辑。任何帮助都会有所帮助。

4

1 回答 1

1

标准库runpy为此目的提供了一个模块:制作一个仅包含

import runpy
runpy.run_module("my_package",alter_sys=True)

然后python文件上运行裸机将等同于python -m my_package- 包括sys.path通过PYTHONPATH或将脚本放置在包含my_package.

于 2020-07-09T02:31:54.123 回答