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

标签 python sys.path

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

这是设置:

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/

相关文章:

python - python 中的新 sys.path

python - 在 Jupyter Notebook 中使用 Flask-SQLAlchemy 模型

python - 特定于应用程序的 PYTHONPATH

python - 如何使 macports python 使用自己的软件包而不是其他安装的软件包?

Python——列表索引超出范围——在一个简单的 SELECT 语句上?

python - Spyder IPython 和 "normal"IPython sys.path 之间的区别

python - dist-packages 和 sys.path

python - 如何访问本地网络上运行的服务器

Python 作用域和线程问题

python - 加载神经网络时如何解释文件 mean.binaryproto?