首页 > 解决方案 > 从内部包调用函数

问题描述

我通过分离不同的功能来组织我的项目,但不知道如何在我创建的部分之间进行通信。

我正在尝试通过包含此导入语句从run_perf.pyin访问函数addMetrics.py

from analysis import run_perf
...
runtime = run_perf.calcMs()

不断收到ModuleNotFoundError: No module named 'analysis'但不知道如何修复它。

项目结构:

myApplication/
│
├── bin/
│
├── myApplication/
│   ├── __init__.py
│   ├── runner.py
│   ├── analysis/
│   │   ├── __init__.py
│   │   ├── run_perf.py
│   │   └── mem_perf.py
│   │
│   └── conversion/
│       ├── __init__.py
│       ├── convert.py
│       └── addMetrics.py
│
├── .gitignore
├── LICENSE
└── README.md

(如果值得注意的话,我的__init__.py文件现在也是空的)

标签: pythonimportpython-modulepython-packaging

解决方案


收到一条非常有用的消息,解决了这个问题!

I’m trying to access functions from run_perf.py in addMetrics.py by
including this import statement

from analysis import run_perf
...
runtime = run_perf.calcMs()

I keep getting ModuleNotFoundError: No module named ‘analysis’ but don’t know what about my import is wrong.

这意味着 Python 无法处理“分析”包。Python 在 sys.path 中查找:

从系统导入路径打印(repr(路径))

/Users/cameron/lib/python:/Users/cameron/rc/python

其中包含我用于交互式 python 使用的个人代码和 tabhistory。

根据您的文件树:

File Structure:

appName/
âââ bin/
âââ appName/
â   âââ __init__.py
â   âââ runner.py
â   âââ analysis/
â   â   âââ __init__.py
â   â   âââ run_perf.py
â   â   âââ mem_perf.py
â   âââ conversion/

[…]

您需要在 $PYTHONPATH 中包含 /path/to/appName/appName。

出于测试目的,请手动执行<示例:

导出 PYTHONPATH=/path/to/appName/appName

对于像上面这样安装的应用程序树,一种典型的方法是让 appName/bin 中的可执行文件成为一个小的包装脚本,它从自己的路径中找出它,设置 $PYTHONPATH,然后在你真正的 Python 主服务器上执行 Python程序。或者,让安装过程将所需的路径连接到包装脚本以避免猜测。

干杯,卡梅伦辛普森 cs@cskk.id.au

https://discuss.python.org/t/calling-functions-from-packages/10107/2


推荐阅读