Python 从距离 main() 很远的文件导入模块[重复]

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

我有一个 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.py
相对于
file_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. 希望不要安装任何其他库(不是绝对必要的,但这对我来说是向生产环境添加新库的整个过程)

任何帮助将不胜感激!

python import absolute-path relative-import
1个回答
-1
投票

即使您可以重写导入以便能够在文件夹名称中包含空格的情况下运行此导入,您的相对/绝对导入也会因其他原因而崩溃。删除文件夹名称中的空格(使它们成为有效的 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 
© www.soinside.com 2019 - 2024. All rights reserved.