我有一个setup.py
脚本,用于构建要安装到./build/lib
目录的文件。这些文件由我的自定义run()
子类的distutils.command.build.build
方法填充:
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)
)
现在,根据this article,安装脚本应该将./build/lib
目录中的所有内容复制到安装目录,该目录在 OSX 上按预期工作,但不在上Ubuntu 14.04 ,它会忽略./build/lib
目录,而是安装./build/lib.<plat>
中找到的文件,而这些文件又无法在 OSX 上工作./build/lib.<plat>
1}}目录被忽略。
使用 distutils 构建和安装文件是否有一致的,独立于平台的方式?这些文件与平台无关。
答案 0 :(得分: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)
)
不要更改self.build_lib
中MyBuild.run()
的值,因为它是从命令行参数和/或各种默认值生成的。其他几个属性也是如此,例如build_scripts
,build_base
,build_purelib
等。
答案 1 :(得分:0)
最简单的解决方案似乎是设置build_lib
命令类的distutils.command.build.build
属性。该属性在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)
)