我已经使用相对导入有一段时间了,在大型项目中很舒服,但是..可以直接运行吗?
我只知道一种使用 try-except 的方法:
try:
from .relative_path import Something
except ImportError:
from relative_path import Something
但是当导入的模块在父目录或其他目录中时它会引发
ModuleNotFoundError
。
try:
from ..relative_path import Something
except ImportError:
from parent_directry.relative_path import Something
>>ImportError
I found in another question to use
python -m
but it also raises an ImportError
.
不是那样的。
只有当所有涉及的模块都在同一个包中时,相对导入才会起作用,正如导入系统所识别的那样。
正确的做法是将您的项目作为一个包正确安装——只需编写一个最小的
setup.py
文件(周围有几个示例,或者您可以向 A.I. 生成器询问一个准备好供您使用的),然后安装您的项目作为一个可编辑的包 pip install -e .
示例setup.py:
import setuptools
setuptools.setup(
name="packagename",
description="...",
packages=setuptools.find_packages(),
package_dir={'': 'src'}, # if there is an `src` intermdiate dir, otherwise, just skip this argument
)
制作一个合适的包的替代方案——比如,你的 Python 文件是独立的模块,你只是想在一个松散的目录结构中相互依赖地使用,根据你的心情修改(听起来已经够糟糕了吗?:-))是导入
sys
并直接修改sys.path
变量:它是一个普通的字符串列表,您可以随意修改。只需在列表的开头插入您的父目录,Python 就会在那里找到您的 .py
文件。