【问题标题】:autotools and python setup.py自动工具和 python setup.py
【发布时间】:2011-11-14 23:49:56
【问题描述】:

我有一个主要用 c++ 编写的项目,其中包括一些用 python 编写的帮助脚本。目前,脚本包含由自动工具替换的变量:

#!@PYTHON@
# -*- coding: utf-8 -*-
...

try:
    datapath = os.environ['DATA_PATH']
except KeyError:
    datapath = '@pkgdatadir@'

这里是 Makefile.am 的摘录:

BUILT_SOURCES = script.py
nodist_python_PYTHON = script.py 
CLEANFILES = $(python_PYTHON)
EXTRA_DIST = script.py.in 

do_subst = sed -e 's,[@]PYTHON[@],$(PYTHON),g'\
           -e 's,[@]pkgdatadir[@],$(pkgdatadir),g'

script.py: script.py.in
    $(do_subst) < $< > $@
chmod +x $@

这些脚本还有一些模块依赖关系,可能由 setup.py 脚本更好地处理。

那么混合 autotools 和 python distutils 工具的最佳方式是什么?我应该完全依赖自动工具吗?否则如何在 Makefile.am 中集成 setup.py 的启动?

【问题讨论】:

    标签: python autotools


    【解决方案1】:

    我会使用 autoconf 来设置 script.py 而不是你所展示的“make”。比如:

    AC_CONFIG_FILES([script.py], [chmod +x script.py])
    

    在 configure.ac 中的 AC_OUTPUT 之前应该这样做。

    【讨论】:

    • 好点,这将自动进行替换。但是,它对 python 依赖项并没有真正的帮助。
    • 我只是在文档中读到目录变量没有被 AC_CONFIG_FILES 完全扩展,所以这对于 $(pkgdatadir) 来说效果不佳。
    • 我错了。我的答案不适用于 pkgdatadir,因为它是在安装时设置的。
    • autoconf 建议不要通过 configure 进行此类替换:“您不应依赖 AC_CONFIG_FILES 来替换 shell 脚本和其他文件中的 bindir 和朋友”,请参阅 gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.69/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-24
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    • 2023-03-05
    相关资源
    最近更新 更多