gpt4 book ai didi

Python 3 : Issue importing subpackages to top-level package

转载 作者:太空宇宙 更新时间:2023-11-03 21:00:21 25 4
gpt4 key购买 nike

我不知道我错过了什么,但我有以下项目结构:

Project
|audio_input
|output_files
|audio_classifier
||________________
|__init__.py
|base.py
|preprocessing
||_____________
|__init__.py
|base.py
|input_preparation.py
|_feature_extraction.py
|classification
|______________
|__init__.py
|classifier_gpu_enabled.py
|_nn_architectures.py
|docs
|examples
|tests
|README
|req.txt
|setup.py

audio_classifier是我的源根目录,base.py 内容是:

import sys
import os

print(sys.path)
print(__name__, __package__)

from audio_classifier.preprocessing.input_preparation import InputPreparation

我有两种情况:

  1. 绝对导入:当我运行时 python -m base在audio_classifier文件夹中我收到以下错误: ModuleNotFoundError: No module named 'audio_classifier'但这真的让我很困惑,因为我已经有一个 __init__.py在顶级包上。难道不应该被认可吗?

sys.path包含路径 ['/home/$USER/Project/audio_classifier', ...],那么它不应该使用绝对导入来工作吗?确实__package__为空。

  • 相对导入:替换 from audio_classifier.preprocessing.input_preparation import InputPreparation对于 from .preprocessing.input_preparation import InputPreparation现在我收到以下错误:
  • ImportError: attempted relative import with no known parent package它有同样的问题根源,Python 没有将我的顶级包识别为包。

    注意:第一个选项实际上在使用 PyCharm 运行 base.py 时有效。但源根、环境和路径与我在终端上运行的相同。我一定错过了一些非常重要的东西。

    我试图了解 numpy 和 librosa 这样的大型库如何组织他们的存储库,并试图将这个概念带到我自己的存储库中,但是复制他们的方法给我带来了这些错误,我真的无法在时刻。

    提前谢谢你们,伙计们。

    编辑1: PYTHONPATH: ['', '$HOME/.conda/envs/ac/lib/python37.zip', '$HOME/.conda/envs/ac/lib/python3.7', '$HOME/.conda/envs/ac/lib/python3.7/lib-dynload', '$HOME/.conda/envs/ac/lib/python3.7/site-packages']

    最佳答案

    • 您的“源根目录”(在 PyCharm 术语中)应该是您的 setup.py 等所在的位置(即图表中的 Project/ )。这是您放置所有包裹的地方。 (有些存储库有一个额外的 src/ 目录,但我们现在不考虑这个。)
    • 如果您希望能够使用 from audio_classifier 导入内容,
    • Project/audio_classifier 不应该位于 sys.path 中... 没有头痛。只有项目应该。

    这是一个简单的例子:

    $ mkdir ac  # create a package directory
    $ touch ac/__init__.py # create the package init file so it's a package
    $ echo 'from .foo import baz' > ac/base.py # create a module in the package
    $ mkdir ac/foo # create a subpackage
    $ echo 'baz = 8' > ac/foo/__init__.py # create a package init file in the subpackage
    $ echo -e 'from .base import baz\nprint(baz)' > ac/__main__.py # create a __main__ file that can be run with `-m`
    $ python -m ac
    8
    $

    结构如下

    $ tree -I '*.pyc'
    .
    └── ac
    ├── __init__.py
    ├── __main__.py
    ├── base.py
    └── foo
    └── __init__.py

    并且事物也可以交互工作:

    >>> import ac
    >>> import ac.base
    >>> import ac.foo as f
    >>> f.baz
    8
    >>> ac.base.baz
    8

    关于Python 3 : Issue importing subpackages to top-level package,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55748383/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com