【问题标题】:Distutils ignores build/lib on UbuntuDistutils 忽略 Ubuntu 上的 build/lib
【发布时间】:2014-10-08 20:39:20
【问题描述】:

我有一个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)
)

现在,根据this article,安装脚本应该将./build/lib 目录中的所有内容复制到安装目录,这在 OSX 上可以正常工作,但在 Ubuntu 14.04 忽略./build/lib 目录,而是安装在./build/lib.<plat> 中找到的文件,而这又在忽略./build/lib.<plat> 目录的OSX 上不起作用。

是否有一致的、独立于平台的方式来使用 distutils 构建和安装文件?这些文件与平台无关。

【问题讨论】:

    标签: python ubuntu setuptools distutils setup.py


    【解决方案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_scriptsbuild_basebuild_purelib 等。

    【讨论】:

      【解决方案2】:

      最简单的解决方案似乎是设置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)
      )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-05
        • 2016-07-25
        • 1970-01-01
        • 1970-01-01
        • 2012-04-23
        • 2020-04-03
        相关资源
        最近更新 更多