我有一个自定义版本的cpython 3.6.6,它是通过自定义安装的clang 6.0构建的。这些文件都不在文件系统上的固定,可预测的绝对路径中。结果,在cpython构建时,CC
环境变量(以及CXX
,LD_LIBRARY_PATH
等)是从某些特定工作到clang的 relative 路径。目录,类似export CC=relative/path/to/clang
*。
似乎python distutils记住了CC
环境变量的这个值。也就是说,我可以使用内置的python进入REPL会话并执行以下操作
$ echo $CC
/some/system/gcc
$ path/to/python3
Python 3.6.6 (default, Oct 3 2018, 10:19:41)
[GCC 4.2.1 Compatible Clang 6.0.0 (tags/RELEASE_600/final)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from distutils import sysconfig
>>> sysconfig.get_config_var('CC')
'relative/path/to/clang-6.0 -pthread'
所以我的问题是:我可以阻止distutils记住在构建时使用的CC
吗?我可以确保在运行CC
时正确设置distutils
。
要应对明显的解决方案:CC=new/relative/path/to/clang python3 -m distutils ...
不能解决问题吗?不会。至少,似乎不是在使用pip
安装需要C编译器的东西时。如果我在某个时候使用CC=new/relative/path/to/clang python3 -m pip ...
,它将尝试使用CC
从安装时起就已经记住的distutils
。我无法确切指出pip
,setuptools
中的哪一个,或此处有其他错误。
*这本质上是因为我正在使用bazel来协调所有这些,但是要解释详细信息会使我离这个问题太远了。