<p>可以在包查找配置中使用相对路径。示例:</p>
<h3>所有分布式源都位于<code>generated</code></h3>
<pre><code>from setuptools import setup, find_packages
setup(
...
package_dir={'': '../generated'},
packages=find_packages(where='../generated'),
)
</code></pre>
<h3>选定的包应该包含在<code>generated</code></h3>
<p>在本例中,只包括来自<code>generated</code>的<code>spam</code>和<code>eggs</code>包:</p>
<pre><code>import pathlib
from setuptools import setup, find_packages
setup(
name='so',
package_dir={'spam': '../generated/spam', 'eggs': '../generated/eggs'},
packages=find_packages(where='../generated'), # or just ['spam', 'eggs']
)
</code></pre>
<p>或者实现动态查找,例如</p>
<pre><code>package_dir={p.name: p.resolve() for p in pathlib.Path('..', 'generated').iterdir()}
</code></pre>
<h3>通过解析与<code>setup.py</code>文件</h3>相关的所有路径,可以更好地实现
<p>解析与<code>setup.py</code>脚本相关的所有路径允许您从<code>src</code>以外的任何其他目录运行脚本,例如,您可以运行<code>python src/setup.py bdist_wheel</code>等。您可能需要它,也可能不需要它,这取决于您的用例。尽管如此,方法还是和往常一样:解析到<code>__file__</code>的所有路径,例如</p>
<pre><code>import pathlib
from setuptools import setup, find_packages
src_base = pathlib.Path(__file__, '..', '..', 'generated').resolve()
setup(
...
package_dir={'': str(src_base)},
packages=find_packages(where=src_base),
)
</code></pre>