Проверьте имя дистрибутива Linux

composer init запускает интерактивный процесс для создания composer.json для нового проекта. когда вы запускаете команду, она задает ряд вопросов. вы, кажется, не даете никаких ответов, и похоже, что догадки по умолчанию недействительны.

https://getcomposer.org/doc/03-cli.md#init

29
задан Peter Mortensen 21 October 2017 в 11:35
поделиться

5 ответов

Это работает для меня в Ubuntu:

('Ubuntu', '10.04', 'lucid')

Затем я использовал strace, чтобы выяснить, что именно делает модуль платформы, чтобы найти дистрибутив, и именно эта часть:

open("/etc/lsb-release", O_RDONLY|O_LARGEFILE) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=102, ...}) = 0
fstat64(3, {st_mode=S_IFREG|0644, st_size=102, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb76b1000
read(3, "DISTRIB_ID=Ubuntu\nDISTRIB_RELEAS"..., 8192) = 102
read(3, "", 4096)                       = 0
read(3, "", 8192)                       = 0
close(3)                                = 0

Итак, есть /etc/lsb-release, содержащая эту информацию, которая поступает из пакета базовых файлов Debian Ubuntu.

11
ответ дан Peter Mortensen 28 November 2019 в 01:48
поделиться

Это работает здесь. И нет, Arch Linux не основан на Debian.

>>> import platform
>>> platform.dist()
('SuSE', '11.2', 'x86_64')

Так что Python не знает, как получить информацию о выпуске Arch Linux, и он жестко запрограммировал поиск / etc / redhat-release и /etc/SuSE-release.

platform.dist () является устаревшей функцией. Вы должны использовать platform.linux_distribution ()

На самом деле, в моей системе это дает другой результат:

>>> platform.linux_distribution()
('openSUSE ', '11.2', 'x86_64')

platform.linux_distribution () ищет в файлах / etc, содержащих "release" или " версия "как строка. Это также выглядит в стандартном файле релиза LSB. Если в конце это не сработало, оно прибегает к функции _dist_try_harder, которая пытается получить информацию из других мест.

Таким образом, именно Arch Linux должен предоставить стандартную информацию о выпуске LSB или исправить Python, чтобы использовать их «путь».

6
ответ дан Peter Mortensen 28 November 2019 в 01:48
поделиться

Вам, вероятно, придется прибегнуть к:

if platform.linux_distribution() == ('', '', ''):
    # do something specific to look for Arch

или вы всегда можете увеличить lib / python2.6 / platform.py и отправить свои изменения.

-1
ответ дан msw 28 November 2019 в 01:48
поделиться

Вот что я нашел:

platform.linux_distribution

Пытается определить имя Имя дистрибутива ОС Linux.

В нем говорится, что platform.dist устарел с 2.6, вы должны использовать platform.linux_distribution в Python 2 (но он также устарел в Python 3.5).

16
ответ дан 28 November 2019 в 01:48
поделиться

Два варианта:

  1. Использовать платформу импорта platform.linux_distribution () # Что-то вроде ('Ubuntu', '9.10', 'karmic')

  2. Или вы можете просто прочитать содержимое / etc / debian_version ("squeeze / sid") или / etc / lsb-release, что даст:

     DISTRIB_ID = Ubunt 
    DISTRIB_RELEASE = 9.10 {{1 }} DISTRIB_CODENAME = karmic 
    DISTRIB_DESCRIPTION = "Ubuntu 9.10" 
     
0
ответ дан 28 November 2019 в 01:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: