gpt4 book ai didi

Python 导入模块、文件夹结构

转载 作者:太空狗 更新时间:2023-10-29 21:08:43 25 4
gpt4 key购买 nike

我一直在寻找解决这个问题的方法。

我有一个 python 项目,这是我想要的文件夹结构:

/project/main.py
/project/src/models.py
/project/test/tests.py

我希望能够通过在终端中执行 tests.py 来运行测试。 tests.py 导入/project/src/中的模块进行测试。首先我通过添加解决了这个问题 sys.path.insert(0, '..') 在 tests.py 中。但是 models.py 中用于打开文本文件的路径必须是相对于 tests.py 等的路径。这意味着程序不会在执行时运行ma​​in.py,路径的原因。

在将模块导入 tests.py 时,我也尝试过使用 ,例如 from ..src.models import *,但给出了错误消息“Attempted relative import在非包装中”。

为了能够从 models.py 导入模块,我应该在 tests.py 的顶部放什么?

最佳答案

您使用的结构不是我推荐的结构,但我对 Python 项目通常的结构方式比较陌生。我相信这会满足您的需求:

1) 在/project/project/src/project/test<中放置一个__init__.py文件 以确保它们被视为包。

2) 将 from __future__ import absolute_import 放在每个 Python 文件的顶部。

3) 然后使用相对导入:

测试.py:

from ..src import models

main.py:

from .src import models

4) 您需要以不同的方式启动您的应用程序。确保您的当前目录是 /project 的父目录(它似乎是文件系统根目录)并以这种方式运行您的项目:

python -m project.main

对于我自己的项目,如果它是您应用程序的起点,我肯定会将 main.py 放在 src 中。我也可能将 tests.py 放在 src 中,但如果没有,我会将 /project/src 添加到测试运行程序的 Python 路径中命令行而不是代码。

无论如何,我仍然会使用 absolute_import。根据我的经验,这是一个非常干净的模块组织解决方案,也是 Python 3 中默认的工作方式。

关于Python 导入模块、文件夹结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20693687/

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