<p>应调整以下几点:</p>
<ol>
<li><code>MANIFEST.in</code>将仅在打包源dist时使用,因此<code>python setup.py sdist</code>将包括{<cd3>},即使是在当前的设置中。二进制分布不是这样,<code>bdist_egg</code>和{<cd5>}都不会读取{<cd1>}。在</li>
<li><p><code>package_data</code>通常用于放在包内的非python文件,但是<code>mesa</code>没有放在<code>tm</code>目录中,因此相对路径是错误的。可以通过设置虚线路径来绕过此问题:</p>
<pre><code>package_data={'tm': ['../mesa/a.txt']}
</code></pre>
<p>但是,如果<code>mesa</code>是<code>tm</code>包的一部分,那么将其放在它所属的位置是有意义的。</p></li>
<li><p><code>os.path.join('..', 'mesa', 'a.txt')</code>将解析相对于当前目录的路径,因此这一行只能在<code>tm</code>目录中找到该文件-在安装包之后,很难找到该文件。您需要正确解析路径,例如针对<code>__file__</code>属性:</p>
<pre><code>os.path.join(os.path.dirname(__file__), '..', 'mesa', 'a.txt')
</code></pre></li>
</ol>
<p>附加说明:</p>
<ol>
<li>您可以安全地将<code>py_modules=['tm.test2']</code>替换为<code>packages=['tm']</code>,并且在向<code>tm</code>包中添加更多模块时,不需要关心更新<code>py_modules</code>。在</li>
<li><p><code>setuptools</code>提供了一个名为<code>pkg_resources</code>的模块,该模块为通过<code>package_data</code>安装的非python文件提供了有用的管理功能。例如</p>
<pre><code>open(os.path.join('..', 'mesa', 'a.txt'), 'r').read()
</code></pre>
<p>可以替换为</p>
<pre><code>pkg_resources.resource_string('tm', '../mesa/a.txt')
</code></pre>
<p>如果您想了解更多信息,请参阅<code>setuptools</code>文档中的<a href="https://setuptools.readthedocs.io/en/latest/pkg_resources.html#resourcemanager-api" rel="nofollow noreferrer">ResourceManager API</a>部分。</p></li>
</ol>