是否可以直接运行带有相关导入的模块?

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

我已经使用相对导入有一段时间了,在大型项目中很舒服,但是..可以直接运行吗?

我只知道一种使用 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
.

python import python-import importerror relative-import
1个回答
0
投票

不是那样的。

只有当所有涉及的模块都在同一个包中时,相对导入才会起作用,正如导入系统所识别的那样。

正确的做法是将您的项目作为一个包正确安装——只需编写一个最小的

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
文件。

© www.soinside.com 2019 - 2024. All rights reserved.