从父目录导入功能

时间:2019-10-03 23:02:57

标签: python visual-studio-code

我有一个目录,其中包含一堆函数,另一个目录包含我的主项目,我想从终端kf_sine_demo.py运行该项目。

enter image description here

当我逐行运行VS-Code中的代码时(使用Shift + Enter),一切正常。 特别是,我可以导入功能以供进一步使用:

from EKFUKF_Py import lti_disc, kf_predict, kf_update, rts_smooth

但是,当我从终端运行文件时:

python kf_sine_demo.py

我收到以下错误:

Traceback (most recent call last):
  File "EKFUKF_Py/demo/kf_sine_demo/kf_sine_demo.py", line 16, in <module>
    from EKFUKF_Py import lti_disc, kf_predict, kf_update, rts_smooth
ModuleNotFoundError: No module named 'EKFUKF_Py'

我看到了包括指定完整路径的解决方案。我强烈希望相对进口。


更新:

此解决方案对我最有用:https://stackoverflow.com/a/37193862/4576194

  • python -m EKFUKF_Py.demo.kf_sine_demo.kf_sine_demo的父目录运行EKFUKF_Py

但是,那不是我想要的。我希望能够从python kf_sine_demo.py目录运行kf_sine_demo,并且希望它知道其需要导入的功能位于2层以上。

1 个答案:

答案 0 :(得分:1)

您必须了解python路径的工作方式。这是python查找要尝试导入的模块的目录列表,您可以使用sys.path命令来显示它。 python自动添加到一堆目录,例如path\to\your_python_install\lib,并且在运行脚本时python也添加工作目录。

这意味着当您这样做时:

python kf_sine_demo.py

此文件的父目录(kf_sine_demo)已添加到路径,但EKFUKF_Py未添加。因此python无法在其中找到模块。

从这里开始,有两个解决方案。您可以手动添加此目录(我觉得这个目录有点难看,但是可以用):

sys.path.append("path/to/EKFUKF_Py")

例如,您可以确保始终通过main.py文件从主目录运行文件。从那里,您将能够调用此目录中的每个子模块。

  

更多内容:https://www.devdungeon.com/content/python-import-syspath-and-pythonpath-tutorial