【问题标题】:Calling functions from internal packages从内部包调用函数
【发布时间】:2021-10-15 06:37:30
【问题描述】:

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

我正在尝试通过包含此导入语句来访问来自addMetrics.py 中的run_perf.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文件目前也是空的)

【问题讨论】:

  • 这是你运行 Python 的方式: cd 进入顶级 myApplication 并执行 python -m myApplication.runner

标签: python import python-module python-packaging


【解决方案1】:

收到了解决问题的非常有用的消息!

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 无法处理“分析”包。蟒蛇看起来 在 sys.path 中:

从系统导入路径 打印(代表(路径))

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

其中包含我的个人代码和交互式 python 的标签历史 使用。

基于您的文件树:

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

【讨论】:

    【解决方案2】:
    from myApplication.analysis import run_perf
    

    请注意,包名 myApplication 违反了 PEP8 规则。

    【讨论】:

    • 仅以 myApplication 为例,感谢提醒。您的解决方案仍然导致错误:ModuleNotFoundError: No module named 'myApplication'
    • 这是基于您与我们分享的有限信息。我假设您是从顶级文件夹中开始的,但显然您没有。那么您的顶级脚本在哪里,您是否在可编辑模式下正确安装了模块?
    猜你喜欢
    • 2016-04-07
    • 2017-03-05
    • 1970-01-01
    • 1970-01-01
    • 2014-10-01
    • 1970-01-01
    • 2016-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多