gpt4 book ai didi

python - 如何将脚本的父目录作为模块加载,而不将该目录的父目录的所有兄弟添加到我的 sys.path 中?

转载 作者:太空宇宙 更新时间:2023-11-04 06:38:48 24 4
gpt4 key购买 nike

我希望这个被我忽略的问题有一个简单的答案。

这是设置:

foo/
__init__.py
run.py

run.py 的内容:

import foo

运行脚本:

$ python run.py 
Traceback (most recent call last):
File "run.py", line 1, in <module>
import foo
ImportError: No module named foo

我能想出解决这个问题的唯一方法是:

run.py 的内容:

import sys
import os

path = os.path.abspath(__file__)
sys.path.append(os.path.join(os.path.dirname(path), "../"))

import foo

这样可行,但问题(如果我没记错的话)是这会将 foo/的父目录添加到 sys.path 并因此搜索 foo/的所有同级文件夹用于 Python 模块。

有一个案例我真的、真的不想那样做。我只想将单个目录作为模块添加到我的路径中,但我不知道如何只添加该模块而不添加该目录的父目录以及该父目录下的所有其他目录.

我是不是忽略了什么?有没有一种简单的方法可以将脚本的父文件夹添加为模块?

最佳答案

我不太明白为什么run 是为了导入它自己的父。毕竟,包只是一种将模块收集在一起的方式。它本身并不意味着具有重要的功能。

Packages are a way of structuring Python’s module namespace by using “dotted module names”. For example, the module name A.B designates a submodule named B in a package named A. Just like the use of modules saves the authors of different modules from having to worry about each other’s global variable names, the use of dotted module names saves the authors of multi-module packages like NumPy or the Python Imaging Library from having to worry about each other’s module names.

您确定不希望run 导入同级模块 吗?你可以使用 relative imports 来做.

关于python - 如何将脚本的父目录作为模块加载,而不将该目录的父目录的所有兄弟添加到我的 sys.path 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4520433/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com