如何处理“公共接口”和“内部使用”的Python包内容?

如何处理“公共接口”和“内部使用”的Python包内容?,python,Python,我正在将一些单文件Python模块重构为多文件包,并且我反复遇到相同的问题模式:我有一些对象是包的公共接口的一部分,但也必须由包的子模块在内部使用 mypackage/ __init__.py # <--- Contains object 'cssURL' views.py # <--- Needs to use object 'cssURL' 然而,如果我每次都这样做,似乎子模块的数量会成倍增加。此外,客户机现在必须将mypackage.cssURL称为

我正在将一些单文件Python模块重构为多文件包,并且我反复遇到相同的问题模式:我有一些对象是包的公共接口的一部分,但也必须由包的子模块在内部使用

mypackage/
    __init__.py  # <--- Contains object 'cssURL'
    views.py     # <--- Needs to use object 'cssURL'
然而,如果我每次都这样做,似乎子模块的数量会成倍增加。此外,客户机现在必须将mypackage.cssURL称为mypackage.style.cssURL,否则我必须在_init__; py.py中创建一个同义词,如下所示:

import style
cssURL = style.cssURL

我想我做错了什么。有没有更好的方法来处理这些类型的包成员,它们既是公共接口的一部分,又是内部使用的?

据我所知,首选的方法是在uu init_uu.py中创建一个同义词,并使用from.style import cssURL;cf..

据我所知,首选的方法是使用from.style import cssURL在_init__.py中创建同义词;cf..

我将按照以下方式构建它:

/mypackage
    __init__.py
       from style import cssURL
       ...
    style.py
       cssURL = '...'  # or whatever
       ...
    views.py
       from .style import cssURL
       ...

如果同一个包中的其他模块需要它们,我不会在_init__u; py.py中定义名称;只需在那里创建一个别名供外部使用者使用。

我将按如下方式构造它:

/mypackage
    __init__.py
       from style import cssURL
       ...
    style.py
       cssURL = '...'  # or whatever
       ...
    views.py
       from .style import cssURL
       ...

如果同一个包中的其他模块需要它们,我不会在_init__u; py.py中定义名称;只需在那里创建一个别名供外部使用者使用。

您可以将当前软件包称为:


有关更多信息,请参阅。

您可以将当前软件包称为:


有关详细信息,请参阅。

或从样式导入cssURL放入\uuuu init\uuuuu.py。。。cssURL当前在哪里,只是在uuu init_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。。。cssURL目前在哪里,刚刚定义在_init__u; py本身?这里的一致性让我感到鼓舞。我想知道这个策略对pydoc生成的文档有什么影响?我会看到的。@DavidCharles任何docstring都是通过导入实现的,所以我不希望出现任何问题。是的,cssURL出现在pydoc为mypackage生成的HTML中。非常感谢。是的,cssURL由pydoc呈现,但是它不呈现docstring,因为cssURL是一个普通字符串。所有这些内容都进入“数据”部分。所以,我决定用一个同名函数来公开。@DavidCharles字符串不能有docstring,所以我认为这不会有什么不同。我对这里的一致性感到鼓舞。我想知道这个策略对pydoc生成的文档有什么影响?我会看到的。@DavidCharles任何docstring都是通过导入实现的,所以我不希望出现任何问题。是的,cssURL出现在pydoc为mypackage生成的HTML中。非常感谢。是的,cssURL由pydoc呈现,但是它不呈现docstring,因为cssURL是一个普通字符串。所有这些内容都进入“数据”部分。所以,我决定用一个同名函数来公开。@DavidCharles字符串不能有docstring,所以我认为这不会有什么不同
# views.py
from . import cssURL