<p>通过导入到顶级包中,可以在新包中添加“旧”名称。在</p>
<p>在<code>pypackage/__init__.py</code>中作为全局变量导入的名称是<code>pypackage</code>包上的属性。利用它可以访问“传统”位置:</p>
<pre><code># add all public names from pypackage.core.pypackage to the top level for
# legacy package use
from .core.pypackage import *
</code></pre>
<p>现在,任何使用<code>import pypackage</code>的代码都可以使用<code>pypackage.foo</code>和{<cd5>},如果实际上这些对象是在<code>pypackage.core.pypackage</code>中定义的。在</p>
<p>现在,由于<code>pypackage</code>是一个<a href="https://packaging.python.org/guides/packaging-namespace-packages/" rel="nofollow noreferrer">setuptools <em>namespace</em> package</a>,您有一个不同的问题;名称空间包有多个单独的发行版来安装,因此顶级包必须是<em>空的</em>或只包含一个最小的<code>__init__.py</code>文件(使用空目录创建的命名空间包需要python3.3)。在</p>
<p>如果您是使用此命名空间的发行版的唯一发行者,那么您可以在这里稍微作弊,并在您的<code>core</code>包中使用一个<em>单个</em><code>__init__.py</code>文件,该文件可以使用<a href="https://packaging.python.org/guides/packaging-namespace-packages/#pkgutil-style-namespace-packages" rel="nofollow noreferrer">pkg-util-style ^{<cd8>} file</a>与我上面使用的附加导入一起使用,但是,您不能在其他发行包中使用任何<code>__init__.py</code>文件,或者要求它们都使用完全相同的<code>__init__.py</code>内容。协调是关键。在</p>
<p>否则你就得用另一种方法了。将<code>pypackage</code>保留为旧的包装器模块,并重命名新的包格式,以使用可以位于旧模块旁边的新的不同顶层名称。此时,您可以将遗留包直接作为额外的顶层模块包含在项目中。在</p>