没有名为 utils.utils 的模块,utils 不是一个包

问题描述 投票:0回答:1

我有一个项目,其中目录 A 中有一个 python(.py) 文件,在文件夹 A 下,我有一个包含代码的文件:

from utils.utils import csv_file_transform

其中 utils 是 A 的同级目录

 /A
  file.py

 /utils
    __init__.py
    utils.py

但是,我收到错误 No Module named utils.utils, utils is not a package 我尝试使用 sys 添加路径,但仍然给出相同的错误

import sys
sys.path.append('C:/Users/Sri/Documents/newmod/folder/utils')

代码在ubuntu中工作正常,但在windows中不行,我使用的是windows系统

python python-3.x sys
1个回答
0
投票

尽管我不支持仅链接/仅参考答案,但我认为通过引用现有讨论并提供有关 Python 导入机制的更广泛上下文,可以最好地回答您的问题。

您的要求

  • 您真的在致力于创建Python模块吗?如果是这种情况,那么如果您能为您的模块建立严格的结构并遵循这些准则,那就太好了。

  • 请考虑下面的文章,作者是 Jason C. McDonald,内容是在 Python 中构建一个假设的模块 omission

    。给出以下结构:

    omission-git ├── LICENSE.md ├── omission │ ├── app.py │ ├── common │ │ ├── classproperty.py │ │ ├── constants.py │ │ ├── game_enums.py │ │ └── __init__.py │ ├── data │ │ ├── data_loader.py │ │ ├── game_round_settings.py │ │ ├── __init__.py │ │ ├── scoreboard.py │ │ └── settings.py │ ├── game │ │ ├── content_loader.py │ │ ├── game_item.py │ │ ├── game_round.py │ │ ├── __init__.py │ │ └── timer.py │ ├── __init__.py │ ├── __main__.py │ ├── resources │ └── tests │ ├── __init__.py │ ├── test_game_item.py │ ├── test_game_round_settings.py │ ├── test_scoreboard.py │ ├── test_settings.py │ ├── test_test.py │ └── test_timer.py ├── pylintrc ├── README.md └── .gitignore
    Jason 将按照以下方式导入模块

    from omission.common.game_enums import GameMode

相对进口

@am5 建议添加

import os, sys; sys.path.append(os.path.dirname(os.path.realpath(__file__)))
到您的 

__init__.py

 文件。如果您研究
相关讨论,您会发现对于修改sys.path
的看法是多种多样的。有些人可能会争论导入失败和错误,例如:

ImportError:尝试在没有已知父包的情况下进行相对导入

实际上是

代码气味的指示。作为一个解决方案,我希望您不会觉得光顾,我建议您通过以下方式解决导入挑战:

a) 决定您想要进入模块化架构的“深度”的要求。 b) 采用相应的推荐架构,并对模块结构进行严格的处理 c) 避免通过

sys.path

 硬编码任何路径。如上所述,附加相对路径并不是完美的解决方案,但有一些优点,可能值得考虑。

其他值得讨论/文物

  • Python 项目的最佳结构
  • PyPa 的示例项目 (
  • GitHub)
  • 从不同文件夹导入文件
© www.soinside.com 2019 - 2024. All rights reserved.