Distutils在Ubuntu上忽略build/lib
我有一个 setup.py
脚本,它会把一些文件构建到 ./build/lib
这个目录里。这些文件是通过我自定义的 distutils.command.build.build
类中的 run()
方法生成的:
from distutils.command.build import build
from distutils.core import setup
class MyBuild(build):
def run(self):
# Populate files to ./build/lib
setup(
# ...
cmdclass=dict(build=MyBuild)
)
根据这篇文章,这个设置脚本应该把 ./build/lib
目录里的所有东西复制到安装目录。在OSX上,这个过程是正常的,但在Ubuntu 14.04上却不一样,它忽略了 ./build/lib
目录,而是安装了 ./build/lib.<plat>
目录里的文件。而在OSX上,./build/lib.<plat>
目录又被忽略了。
有没有一种一致的、与平台无关的方法来使用distutils构建和安装文件呢?这些文件是与平台无关的。
2 个回答
0
最简单的解决办法似乎是在 distutils.command.build.build
这个命令类中设置 build_lib
属性。这个属性是在 initialize_options()
方法中设置的,而我们需要重写这个方法来设置这个属性:
from distutils.command.build import build
from distutils.core import setup
class MyBuild(build):
def initialize_options(self):
build.initialize_options(self)
self.build_lib = 'build/lib'
def run(self):
# Populate files to ./build/lib
setup(
# ...
cmdclass=dict(build=MyBuild)
)
1
在MyBuild.run()
这个方法里,要把文件放到self.build_lib
指定的路径,而不是写死一个固定的路径。
from distutils.command.build import build
from distutils.core import setup
class MyBuild(build):
def run(self):
build_path = self.build_lib
# Populate files to 'build_path'
setup(
# ...
cmdclass=dict(build=MyBuild)
)
不要在MyBuild.run()
里改变self.build_lib
的值,因为这个值是根据命令行参数和一些默认值生成的。其他一些属性,比如build_scripts
、build_base
、build_purelib
等,也是一样的道理。