gpt4 book ai didi

python - 如何使 Python 绝对导入行更短?

转载 作者:行者123 更新时间:2023-11-28 19:13:43 24 4
gpt4 key购买 nike

这是我的项目结构(只是一个例子来说明问题):

.
├── hello_world
│   ├── __init__.py
│   └── some
│   └── very_nested
│   └── stuff.py
└── tests
└── test_stuff.py

test_stuff.py 文件(用于py.test):

from hello_world.some.very_nested.stuff import Magic
from hello_world.some.very_nested.other_stuff import MoreMagic

def test_magic_fact_works():
assert Magic().fact(3) == 6

# ...

有什么方法可以缩短导入行吗?它们在实际项目中变得太长了。

例如,这很好,但它不起作用:)

import hello_world.some.very_nested as vn
from vn.stuff import Magic
from vn.other_stuff import MoreMagic

我不能使用相对导入(我假设)因为测试不在包内。我可以移动它们,但是可以不改变项目结构吗?

最佳答案

正如@jonrsharpe 所说,您可以以 django 样式聚合您的包:

"""
Django validation and HTML form handling.
"""

from django.core.exceptions import ValidationError # NOQA
from django.forms.boundfield import * # NOQA
from django.forms.fields import * # NOQA
from django.forms.forms import * # NOQA
from django.forms.formsets import * # NOQA
from django.forms.models import * # NOQA
from django.forms.widgets import * # NOQA

然后在您的子包中,例如:django.forms.widgets 添加:

__all__ = (
'Media', 'MediaDefiningClass', 'Widget', 'TextInput', 'NumberInput',
'EmailInput', 'URLInput', 'PasswordInput', 'HiddenInput',
'MultipleHiddenInput', 'FileInput', 'ClearableFileInput', 'Textarea',
'DateInput', 'DateTimeInput', 'TimeInput', 'CheckboxInput', 'Select',
'NullBooleanSelect', 'SelectMultiple', 'RadioSelect',
'CheckboxSelectMultiple', 'MultiWidget', 'SplitDateTimeWidget',
'SplitHiddenDateTimeWidget', 'SelectDateWidget',
)

要在使用 import * 时指定要导入的项目,这样您可以根据需要组织您的包并同时保持它们可访问。

在你的情况下它会是这样的:

hello_world/__init__.py

from hello_world.some.very_nested.stuff import *
from hello_world.some.very_nested.other_stuff import *

例如,当在测试中导入包时,您会得到:from hello_world import Magic

关于python - 如何使 Python 绝对导入行更短?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36290354/

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