首页 > 解决方案 > 如何将自己的 python 模块添加到运行时环境

问题描述

我的 python 项目由许多模块组成,这些模块相互之间有导入语句。在我的 Eclipse PyDev 环境中,这些导入语句运行良好,但是当将其移植到我的 Raspberry 时,运行时环境无法加载依赖模块。

我已经配置了 PYTHONPATH,以便我的项目的根目录 (/home/pi/Desktop/Projects/Catatumbo) 列在sys.path

['/var/www/upload/Projects/Catatumbo',
 '/home/pi/Desktop/Projects/Catatumbo',
 '/usr/lib/python35.zip',
 '/usr/lib/python3.5',
 '/usr/lib/python3.5/plat-arm-linux-gnueabihf',
 '/usr/lib/python3.5/lib-dynload',
 '/home/pi/.local/lib/python3.5/site-packages',
 '/usr/local/lib/python3.5/dist-packages',
 '/usr/lib/python3/dist-packages']

项目结构如下:

-core
--adafruit
---forecast (That's where the utility class resides)
-forecast
--adafruit  (That's where the script resides)

虽然通过以下方式从项目根目录启动脚本:

sudo python3 forecast/adafruit/adafruit_forecast.py

仍然导致以下错误:

File "forecast/adafruit/adafruit_forecast.py", line 35, in <module>
    from core.adafruit.forecast.forecast_colors import ForecastNeoPixelColors
ImportError: No module named 'core'

感谢帮助!

标签: pythonpython-3.x

解决方案


通过阅读这篇有用的文章,Kaya 的评论让我做出了决定:

相对导入使用相对路径(从当前模块的路径开始)到要导入的模块。有两种类型的相对导入:

显式相对导入遵循 from 的格式。导入 X,其中以点为前缀。表示要向上遍历多少个目录。一个点。对应当前目录;两个点 .. 表示一个文件夹向上;等等。一个隐式的相对导入被写成好像当前目录是 sys.path 的一部分。隐式相对导入仅在 Python 2 中受支持。它们在 PYTHON 3 中不受支持。

这样做会遇到'Parent module '' not loaded, cannot perform relative import' 的问题。将脚本作为模块运行将最终解决问题:

Use python -m package.module instead of python package/module.py

推荐阅读