composer init запускает интерактивный процесс для создания composer.json для нового проекта. когда вы запускаете команду, она задает ряд вопросов. вы, кажется, не даете никаких ответов, и похоже, что догадки по умолчанию недействительны.
Это работает для меня в 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.
Это работает здесь. И нет, 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, чтобы использовать их «путь».
Вам, вероятно, придется прибегнуть к:
if platform.linux_distribution() == ('', '', ''):
# do something specific to look for Arch
или вы всегда можете увеличить lib / python2.6 / platform.py и отправить свои изменения.
Вот что я нашел:
platform.linux_distribution
Пытается определить имя Имя дистрибутива ОС Linux.
В нем говорится, что platform.dist
устарел с 2.6, вы должны использовать platform.linux_distribution
в Python 2 (но он также устарел в Python 3.5).
Два варианта:
Использовать платформу импорта platform.linux_distribution () # Что-то вроде ('Ubuntu', '9.10', 'karmic')
Или вы можете просто прочитать содержимое / etc / debian_version ("squeeze / sid") или / etc / lsb-release, что даст:
DISTRIB_ID = Ubunt
DISTRIB_RELEASE = 9.10 {{1 }} DISTRIB_CODENAME = karmic
DISTRIB_DESCRIPTION = "Ubuntu 9.10"