Установка CPython запоминает местоположение CC? - PullRequest
0 голосов
/ 03 октября 2018

У меня есть пользовательская сборка cpython 3.6.6, собранная с пользовательской установкой clang 6.0.Ни один из них не имеет фиксированных, предсказуемых абсолютных путей в файловой системе.В результате во время сборки cpython переменная окружения CCCXX, LD_LIBRARY_PATH и т. Д.) Представляет собой относительный путь к clang из некоторого конкретного рабочего каталога, что-то вроде export CC=relative/path/to/clang*.

Кажется, что python distutils запоминает это значение переменной окружения CC.То есть я могу зайти в сессию 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 для установки вещей, которые требуют компилятора Си.Если в какой-то момент я использую CC=new/relative/path/to/clang python3 -m pip ..., он попытается использовать CC, который distutils запомнился во время установки.Я не могу точно определить, какой из pip, setuptools или что-то еще здесь виновато.

* По сути, это потому, что я использую Базель для управления всем этим, но для объясненияподробности уведут меня слишком далеко от сути этого вопроса.

...