擅长:python、mysql、java
<p>为了让distutils安装一个Python包,您需要传递<code>packages=['foo']</code>,如果您要将它放在不是项目根级别的地方(我是指设置.py脚本),就像您在这里所做的一样,您还必须传递<code>package_dir={'foo': 'Source'}</code>或使用更简单的布局。如果你设置.py脚本包含这个<code>packages</code>参数,然后build命令将调用build_py命令将Python源文件(和目录)移动到build目录中,稍后install命令将复制该目录。在</p>
<p>这里的问题是您的<code>foo/__init__.py</code>文件是由build_ext命令生成的,该命令在build\py之后运行。您需要使用自定义生成命令覆盖该命令:</p>
<pre><code>class MyBuild(build):
sub_commands = [('build_clib', build.has_c_libraries),
('build_ext', build.has_ext_modules),
('build_py', build.has_pure_modules),
('build_scripts', build.has_scripts),
]
setup(..., cmdclass={'build': MyBuild, 'build_ext': MyBuildExt})
</code></pre>
<p>sub_commands属性中的元素是(command name,要调用的函数以决定是否运行命令)的元组;这在源代码中有记录,但我不记得文档中是否解释过。在标准的构建类中,build-py位于build-chu-clib之前。在python2.7的下一个版本中,我可能会改变这一点,因为据报道,它与2to3转换的交互非常糟糕。在</p>