【问题标题】:Having trouble with importing files in Python在 Python 中导入文件时遇到问题
【发布时间】:2021-04-23 21:34:15
【问题描述】:

Python 3.8 macOS

我正在尝试在包中导入不同的模块,但在尝试使用相对导入时出现 ModuleNotFoundError 或 ImportError。

我有一个名为“practice_dir”的文件夹,其结构如下:

(base) or ƒ(~/practice_dir) >> tree
.
├── __init__.py
├── dir_1
│   ├── __init__.py
│   ├── file_1.py
│   └── subdir
│       ├── __init__.py
│       └── subfile.py
├── dir_2
│   ├── __init__.py
│   └── file_2.py
└── parent_file.py

网上有人提到,一旦我在每个包含模块的文件夹上都有一个 init 文件,那么绝对导入将从父包开始

相对导入将使用 .或..符号

这是我尝试过的一些示例

在 file_1 中:

from dir_2 import file_2

ModuleNotFoundError

from .dir_2 import file_2

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

如果我在 dir_2 和 dir_1/subfolder 中做同样的事情也是一样的

init.py 文件现在是空的,我尝试将导入包含到文件中,但没有奏效。

我一直在查看在线和 youtube 上发布的一些问题,似乎有多种方法,一个人甚至提到如果你有 python 3.3+,你不需要 init 文件

一直在努力解决这个问题,非常感谢任何帮助!

【问题讨论】:

  • 你的 main.py 脚本在哪里?如果你把它放在包含顶级包目录的同一个父目录中,导入应该都可以正常工作。

标签: python file import directory package


【解决方案1】:

您可以在运行时将文件添加到python路径:

import sys
sys.path.insert(0, 'path/to/file')

import file

【讨论】:

  • 仍然产生模块错误Traceback (most recent call last): File "/Users/or/practice_dir/dir_1/file_1.py", line 1, in <module> import dir_2.file_2 as f2 ModuleNotFoundError: No module named 'dir_2'
  • @orie 更新了我的答案。它现在应该可以工作了
  • sys.path 技巧效果很好,但没有办法让它使用通常的语法吗?我认为python中的目录可以表示为包
  • @orie 我已经在我对您问题的评论中给了您答案。你为什么不试试呢?
  • @orie 我四处寻找其他方法来做到这一点,但这是我看到的唯一有效的方法。虽然可能有更好的解决方案,但这对我有用!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-12
  • 1970-01-01
相关资源
最近更新 更多