擅长:python、mysql、java
<p>您可以使用<code>package_dir</code>参数来控制包所在的目录<code>setup(...)</code></p>
<p>当<code>package_dir</code>是一个以<code>..</code>开始的相对路径时,它看起来确实构建了一个正确的源代码分发,但是<code>pip</code>似乎会拒绝安装它,我建议您将生成的代码嵌套在<code>src</code>目录中,然后使用<code>package_dir</code>来选择它。你知道吗</p>
<p>下面是一个在<code>generated</code>子目录中移动所有模块的示例:</p>
<pre class="lang-py prettyprint-override"><code>setup(
name='mypkg',
package_dir={'': 'generated'},
packages=find_packages('generated'),
)
</code></pre>
<p>使用如下设置:</p>
<pre><code>$ tree .
.
├── generated
│ ├── mod1
│ │ └── __init__.py
│ └── mod2
│ └── __init__.py
└── setup.py
</code></pre>
<p>这将使以下操作在安装后成功:<code>import mod1; import mod2</code></p>
<p>如果要使这些模块以不同的前缀可用,可以执行以下操作:</p>
<pre class="lang-py prettyprint-override"><code>setup(
name='mypkg',
package_dir={'hello': 'generated'},
packages=[f'hello.{mod}' for mod in find_packages('generated')],
)
</code></pre>
<p>这将使<code>import hello.mod1; import hello.mod2</code>在安装之后成功</p>