找不到从终端运行的Python模块

时间:2019-03-21 01:33:43

标签: python

我一直试图弄清楚如何使导入的模块在我的python脚本中工作。它可以在pycharm中工作,所以当我尝试在unix终端中运行它时,我知道它与路径配置有关。

在ubuntu上运行我得到以下信息: 追溯(最近一次通话):

  File "main_app.py", line 12, in <module>
    from flask_app.python_scripts import canvas_test
ModuleNotFoundError: No module named 'flask_app'

是否需要从终端运行命令或需要将其添加到python脚本中的命令?

2 个答案:

答案 0 :(得分:1)

我们公司的工作是在每个包含Python实用程序脚本的目录中都有一个 init.py 文件。脚本会导入init 来读取该文件。此文件修改了python路径,以包括指向我们的实用程序库和某些第三方库的路径。由于所有内容都在同一源代码树中,因此 init.py 文件使用其自身的位置将相对路径转换为绝对路径。这是我们的此类文件之一:

import sys, os

inletPath = os.path.dirname(__file__) + "/../../.."
sys.path.append(inletPath + "/common/python")
sys.path.append(inletPath + "/inletfetch/common/common-pyutil")
sys.path.append(inletPath + "/inletfetch/common/common-pyutil/thirdparty")

inletPath 是我们源代码树的根。相对于源根目录计算特定路径

我们不会尝试在目录之间共享这些文件。我们只要将它放在任何包含我们直接执行的python脚本的目录中即可。

关于这一点的妙处是,创建新脚本时,您要做的就是在其开头添加“ import init”,然后再导入其他任何东西,所有其他内容都会被发现。

答案 1 :(得分:1)

您需要设置目录结构,以便flask_app.py和main_app.py都位于同一目录中。

$ ls
flask_app.py  main_app.py  __pycache__

文件内容...

<flask_app.py>
def canvas_test():
    return "canvas test print"

<main_app.py>
from flask_app import canvas_test
canvas = canvas_test()
print(canvas)

运行时您会得到...

$ python main_app.py 
canvas test print

如果要导入的内容不在同一目录中,则需要使用相对的导入语句,例如  from ..flask_app import canvas_test

或将模块包含在PYTHONPATH