setup.py генерирует / usr / bin оболочки с "# !."притон - PullRequest
1 голос
/ 03 апреля 2019

Я пытаюсь упаковать приложение Python. Скрипт пакета запускается в chroot и вызывает setup.py (на основе setuptools) следующим образом:

python setup.py install --root="$pkgdir"

Однако исполняемые обертки (для размещения в /usr/bin) начинаются с строки #!. shebang, то есть с точки вместо пути к интерпретатору Python.

Почему это происходит и как обойти это (без ручного исправления сгенерированных скриптов)?

1 Ответ

1 голос
/ 03 апреля 2019

setuptools пытается использовать двоичный файл интерпретатора Python, используемый для его вызова для генерации оболочек. Для этой цели он вызывает distutils , который затем запрашивает sys.executable.

В определенных обстоятельствах (например, в данной конкретной ситуации), sys.executable может быть пустой строкой. Наиболее вероятная причина заключается в том, что операция упаковки выполняется в chroot, что не разрешает Python доступ к /proc.

os.path.normpath('') оценивается как '.', который затем распространяется по всему пути назад к setuptools, и заканчивается в шебанге.

Обходной путь - вызвать Python, используя абсолютный путь:

/usr/bin/python setup.py install --root="$pkgdir"

Затем Python может получить свой собственный путь от argv[0], что позволяет setuptools генерировать правильные строки shebang.

...