【问题标题】:Distutils compiler options configurationDistutils 编译器选项配置
【发布时间】:2013-04-11 05:52:41
【问题描述】:

也许是一个愚蠢的问题,但我想知道 Python 的 distutils 从哪里获得编译器选项?它使一些链接目录出错,我想一劳永逸地纠正它。

我知道应该有一个前缀/lib/pythonver/distutils/distutils.cfg,但我在计算机上的任何地方都找不到任何distutils.cfg。显然我没有本地 setup.cfg 或任何 $HOME/.pydistutils.cfg。

我在 Mac OS X 10.8.3 上使用 Enthought 64 位发行版,版本 7.3 (Python 2.7)

干杯, U.

【问题讨论】:

    标签: python python-2.7 distutils enthought


    【解决方案1】:

    我实际上将它们导出到环境中,就像 autotools 的配置一样:

    export CC=/usr/local/bin/clang
    export CFLAGS=-I${HOME}/include
    export LDFLAGS=-lboost
    

    如果您还需要单独覆盖链接器:

    export LDSHARED=/usr/local/bin/clang -shared
    

    如果您不喜欢 export将设置添加到您的环境中,请执行以下操作以进行一次性设置:

    CC=/usr/local/bin/clang CFLAGS=-I${HOME}/include python setup.py build
    

    如果您想了解构建 python 时的默认选项,请使用python-config --<flag>。一些标志是cflagsldflagslibsincludes

    【讨论】:

    • 好吧,那会设置变量,但现在还没有设置,那么 distutils 是从哪里得到的呢?我在 python 文件中没有发现 distutils 会在其他地方读出它的任何提示。
    • 另见埃里克的回答;如果没有配置文件(你说它不存在),编译器标志确实遵循原始的配置/制作标志,因此也可以通过python-config --cflags 等看到。
    • 啊,他们来了!由于我还没有编译 Python 但采用了 EPD 发行版,我猜我不会有 Makefile。但现在我知道在哪里看和做什么。干杯!
    • 终于有足够的时间尝试上面的方法,它有点工作。我将正确的路径和选项以export CFGLAGS='...loads of options and paths...' 的形式包含在我的.bashrc 中。但是,distutils 现在获得了两组标志,其中一些标志相互矛盾,例如 -O3 和 -O2。程序编译得很好...
    • @Mulle:如果我理解正确,对于-L-I 选项,它们会按照出现的顺序进行解释。因此,如果您的本地包含目录是在默认目录之前指定的(我认为在使用 CFLAGS and LDFLAGS), your local include files get picked up first. For the -O` 选项时会发生这种情况,但是,gcc 手册页说:“如果您使用多个 -O 选项,有或没有级别编号,最后一个这样的选项是有效的。”。如果这对您不正确,您可以使用-fno-... 选项来关闭优化。
    【解决方案2】:

    编译器选项取自 CPython 的 Makefile。 IOW 它们与用于编译 Python 的相同。正如 Evert 所述,您可以在命令行上覆盖其中的大部分。

    全局 distutils.cfg 是系统管理员可以创建以设置默认选项的东西,而不是随 Python 一起安装的文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-29
      相关资源
      最近更新 更多