python - 如何将自己的 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'
感谢帮助!
解决方案
通过阅读这篇有用的文章,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
推荐阅读
- c++ - 如何在 Linux-ubuntu 上使用 posix_spawn 打开文件?
- angular - 如何从 Angular 的错误页面中删除页眉和页脚?
- html - 角度反应形式无法找到路径控制
- ember.js - 如何渲染和过滤来自@argument 的数据集合?
- reactjs - 过滤反应管理员
- code-coverage - Makefile:将所有可用的 .info 文件从一个文件夹显示到 lcov 的通用方法
- c++ - 只要 C++ 编译器支持 C 代码,为什么我需要从外部链接到 C?
- f# - Fable 可以发出 TypeScript 或 TypeScript 类型定义文件吗?
- python-3.x - 安装错误:没有为 pIMZ 找到匹配的发行版
- python - 如何在python中改善灰色背景图像上的模糊文本