微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python 从离 main() 很远的文件中导入模块

如何解决Python 从离 main() 很远的文件中导入模块

我有一个 Python 文件文件夹结构,如下所示:

folder w space
       ├── folder1
       │      └── subfolder1
       │              └── file_1.py *is main*
       └── folder2
              └── folder w space2
                       └── file_2.py
                       └── __init__.py

我需要将 file_1.py(具有 main 的文件)导入 file_2.py 作为一个包。请注意,file_2.pyfile_1.py 相关,是向上 3 个目录,然后向下 3 个目录。理论上,我会这样写相对导入:

from ...folder2 import folder w space2.file2

然而,由于子文件夹中的间距,这是无效的。绝对导入更糟糕,因为基本文件夹也包含空格:

import folder w space.folder2.folder w space2.file2 

有了这个,我怎样才能将 file_2.py 作为一个模块导入,而没有:

  1. 重命名文件夹(我不拥有它们,所以即使我想也不能)
  2. 不使用 sys.path.append()(在我们的生产环境中不起作用)
  3. 移动file_2.py(组织必须留在原地)
  4. 希望不要安装任何其他库(不是绝对必要的,但对我来说,将新库添加到我们的生产环境中将是一个完整的过程)

任何帮助将不胜感激!

解决方法

即使您可以 rewrite 导入以能够在文件夹名称中使用空格运行它,您的相对/绝对导入也会因其他原因而失败。从文件夹名称中删除空格(使它们成为有效的 python 标识符),然后运行您的 main 为:

$ cd "folder w space"
$ py -m folder1.subfolder1.file_1

这将使 python 将文件夹视为包(因为它扫描当前工作目录)并且是运行 python 脚本的推荐方式。您的导入将立即生效:

from ...folder2 import folder_w_space2.file2 # or
import folder2.folder_w_space2.file2 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。