Distutils忽略了Ubuntu上的build / lib

时间:2014-09-08 09:01:53

标签: python ubuntu setuptools distutils setup.py

我有一个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 构建和安装文件是否有一致的,独立于平台的方式?这些文件与平台无关。

2 个答案:

答案 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_libMyBuild.run()的值,因为它是从命令行参数和/或各种默认值生成的。其他几个属性也是如此,例如build_scriptsbuild_basebuild_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)
)