我一直试图弄清楚如何使导入的模块在我的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脚本中的命令?
答案 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