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

Python 导入模块在目录和目录级别中带有空格

如何解决Python 导入模块在目录和目录级别中带有空格

我正在'重新发布'这个问题的更多细节,因为我觉得第一次被误解了。我有一个看起来像这样的文件夹结构:

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

我需要让 file_1.pyfile_2.py 导入方法。请注意,file_2.pyfile_1.py 相关,是向上 3 个目录,然后向下 3 个目录。理论上,我会这样写相对导入:

from ...folder2 import folder w space2.file2

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

from folder w space.folder2.folder w space2.file2 

有了这个,我如何在没有:

的情况下访问 file_2.py内容
  1. 重命名文件夹(我不拥有它们,所以即使我想也不能)
  2. 不使用 sys.path.append()(在我们的生产环境中效果不佳)
  3. 移动file_2.py(组织必须留在原地)

任何帮助将不胜感激!

解决方法

您可以使用importlib.import_module

# bar.py
import importlib
importlib.import_module("folder with spaces.foo")     

# folder with spaces/foo.py
print('Hello World')
,

内置的 __import__() 允许在导入语句中支持空格:

sample_with_spaces = __import__("sample with spaces.foo")

sample_with_spaces.foo.hello()

在这个问题中找到它: https://stackoverflow.com/a/9123555/6180150

filename 用作导入模块的标识符(即 foo.py 将作为 foo 导入)并且 Python 标识符不能有空格,import 语句不支持这一点

因此,不是让 import 语句设置标识符,而是通过将 __import__("sample with spaces.foo") 分配给您自己选择的标识符来手动完成。在我的示例中,它是标识符 sample_with_spaces

编辑:

我认为在您的情况下,在子文件夹中执行脚本时,这是更新工作目录的最简单方法,如下所示。

import os

os.chdir("..") # move up as much as needed
sample_with_spaces = __import__("sample with spaces.foo")

sample_with_spaces.foo.hello()

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