gpt4 book ai didi

Python 目录 hell

转载 作者:行者123 更新时间:2023-12-04 10:07:07 27 4
gpt4 key购买 nike

这是我的目录结构:

├── src
│ ├── helpers
│ │ ├── __init__.py
│ │ ├── foo.py
│ │ └── bar.py
│ ├── services
│ │ ├── __init__.py
│ │ ├── faz.py
│ │ └── baz.py
│ └── main.py
├── tests
│ ├── helpers
│ │ ├── test_foo.py
│ │ └── test_bar.py
│ ├── services
│ │ ├── test_faz.py
│ │ └── test_baz.py


我的 src/helpers/__init__.py如下所示:

from .foo import Foo
from .bar import Bar

src/services/__init__.py好像:

from .faz import Faz
from .baz import Baz

我的 src/main.py :

import helpers

f = helpers.Foo()

我的 tests/helpers/test_foo.py :

import src.helpers as helpers

def test_foo():
f = helpers.Foo()

所有这些 作品 .

但是,我的问题是什么时候,比方说, src\services\faz.py引用资料 src\helpers\foo.py .

目前, ...\faz.py如下所示:

import helpers

class Faz():
def DoSomething(self):
# something

如果我运行 python src/main.py,这将有效.但是如果我运行 coverage run -m pytest ,我收到错误 ModuleNotFoundError: No module named 'helpers' .如果我将导入语句更改为 import src.helpers ,测试有效,但应用程序不再有效。

我该如何解决?

谢谢!

最佳答案

我认为你需要把它变成一个可安装的 python 包。您只需执行普通的 python 包导入,而不是破解路径。假设该产品名为“foopackage”,您可以添加 src/foopackage 并包含 setup.py 文件。

├── src
│ ├── foopackage
│ │ ├── helpers
│ │ │ ├── __init__.py
│ │ │ ├── foo.py
│ │ │ └── bar.py
│ │ └── services
│ │ ├── __init__.py
│ │ ├── faz.py
│ │ └── baz.py
│ └── scripts
│ └── main.py
├── tests
│ ├── helpers
│ │ ├── test_foo.py
│ │ └── test_bar.py
│ ├── services
│ │ ├── test_faz.py
│ │ └── test_baz.py
├── setup.py

您可以使用 python setup.py bdist_wheel 打包您的产品或其他选项。或者进行“开发”安装。设置一个python虚拟环境,当你想测试时,在这个目录的根目录下做 pip install -e . (“可编辑”设置它以便 python 从这个本地目录而不是常规的 python 模块目录中获取你的包)。现在类似于 nosepytest可以扫描树以查找任何名为 test_xxx.py 的内容并运行它。
main.py ,脚本和各种测试模块都只是
import foopackage.helpers as helpers

src/services/faz.py 将
from .. import helpers

Python 打包是一种黑暗艺术,但却是极简主义 setup.py将会
#!/usr/bin/env python

from setuptools import find_packages, setup

setup(
name='foopackage',
version='1.0.0',
description='Foo all the Bars',
packages=find_packages('src'),
package_dir={'': 'src'},
scripts=['src/scripts/main.py']
)

关于Python 目录 hell ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61529706/

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