擅长:python、mysql、java
<blockquote>
<p>How do I fix this? I'd like to keep the <code>__init__</code> structure of defining the version, etc, as it seems the Pythonic way to do it.</p>
</blockquote>
<p>不是,名称和版本是包元数据,不属于源代码。它属于您的包定义,在您的案例中表示<code>setup.py</code></p>
<p>您的<code>__init__.py</code>应该以另一种方式工作,并从与python环境的交互及其自身安装中获取信息:</p>
<pre><code>from importlib import metadata
# this works, but usually people just write the name as a string here.
# not 100% DRY, but it's not like the package name could ever change
__title__ = __name__
# if you're stuck on python 3.7 or older, importlib-metadata is a
# third-party package that can be used as a drop-in instead
__version__ = metadata.version(__title__)
</code></pre>
<hr/>
<p>最重要的附加信息应该是永远不要将代码导入构建脚本。它可能1)造成严重的鸡蛋问题,除非已经安装了较旧版本的代码,否则无法生成代码;2)将所有运行时依赖项转化为构建时依赖项,这正是您所经历的</p>
<p>您可能能够解决这两个问题,但更简单的方法是以上述方式设置包数据,并且从一开始就不会遇到问题</p>