【问题标题】:How to add own python modules to runtime environment如何将自己的 python 模块添加到运行时环境
【发布时间】:2020-03-20 02:25:20
【问题描述】:

我的 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'

感谢您的帮助!

【问题讨论】:

  • 请编辑问题以显示这些文件的目录结构。您可能应该使用相对导入,例如 from .core import ...
  • 嗨,Kaya,谢谢您的快速响应。添加结构。我在开发环境中玩过相对导入,但不知道如何进行多级遍历(通常是 ../../somedir;在 python ..somedir 中)。

标签: python python-3.x


【解决方案1】:

Kaya 的评论让我通过阅读这篇有用的article 来解决问题:

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

显式相对导入遵循 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

【讨论】:

    猜你喜欢
    • 2020-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-21
    • 2019-04-26
    • 1970-01-01
    • 1970-01-01
    • 2019-12-15
    相关资源
    最近更新 更多