Создание Python из источника с поддержкой zlib
При создании Python 3.2.3 из источника на Ubuntu 12.04 модуль zlib недоступен.
Я загрузил официальный дистрибутив источника из python.org и попытался построить и установить его со следующими командами.
tar xfa Python3.2.3.tar.bz2
cd Python-3.2.3
./configure --prefix=/opt/python3.2
make
sudo make install
Вывод команды make включает следующее.
Python build finished, but the necessary bits to build these modules were not found:
_curses _curses_panel _dbm
_gdbm _sqlite3 _ssl
_tkinter bz2 readline
zlib
После запуска make install
и запуска интерпретатора модуль zlib
не может быть импортирован.
Я подтвердил, что пакет zlib1g-dev
установлен в моей системе.
Я также нашел этот аналогичный вопрос, в котором предлагается добавить флаг --with-zlib
в команду ./configure
. Тем не менее, это возвращает ошибку, которая является непризнанной и не имеет никакого эффекта.
Ответы
Ответ 1
Решение заключается в установке пакета Ubuntu dpkg-dev
.
sudo apt-get install dpkg-dev
Причина объясняется здесь.
Короче говоря, последние версии Ubuntu не хранят libz.so
в стандартном местоположении /usr/lib
, а скорее в определенном месте на платформе. Например, моя система находится в /usr/lib/x86_64-linux-gnu
. Это предотвращает поиск системы сборки Python.
Пакет dpkg-dev
устанавливает исполняемый файл dpkg-architecture
, который позволяет Python находить необходимые библиотеки.
Первоначальный вопрос касался Python 3.2.3. Я также загрузил Python 2.7.3 и подтвердил, что та же проблема существует, и это решение применимо и к ней.
Ответ 2
У меня была аналогичная проблема с CentOS 6.3 и python 3.2.3
Я решил это:
Измените /Modules/Setup
и раскомментируйте строку:
zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz
изменить в каталог/Модули/zlib:
./configure
make
sudo make install
затем скомпилировал мой источник python3.2.
и затем смог протестировать импорт zlib, и все это работало нормально:)
Ответ 3
Я использую CentOS 6.6 и получаю zlib-ошибки. Ни один из других ответов, предложенных здесь, не работал у меня (включая исправление для CentOS 6.3 раскомментирования строки в модулях/установке). Я исправил его, используя следующие команды.
yum groupinstall "Development tools"
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
Затем конфигурирование и установка python следующим образом:
./configure --prefix=/usr/local LDFLAGS="-Wl,-rpath /usr/local/lib"
make && make altinstall
Теперь я могу импортировать zlib в /usr/local/bin/python 2.7 без проблем.
Эти инструкции немного изменены из статьи, найденной здесь.
Ответ 4
У меня была такая же ошибка при работе над MAC
Моя версия MAC OS
$ uname -v
Darwin Kernel Version 13.4.0: Sun Aug 17 19:50:11 PDT 2014; root:xnu-2422.115.4~1/RELEASE_X86_64
Здесь используется python3.4
Вопрос (ы)
-
zlib недоступен при использовании python3.4
$python3.4 get-pip.py
Traceback (последний последний вызов): Файл "get-pip.py" , строка 20204, в главный() Файл "get-pip.py" , строка 152, в главном самонастройки (TMPDIR = TMPDIR) Файл "get-pip.py" , строка 82, в бутстрапе импорт
zipimport.ZipImportError: невозможно распаковать данные; zlib недоступно
-
Сбой восстановления Python
./configure --with-zlib-dir =/usr/local/lib
...
configure: ПРЕДУПРЕЖДЕНИЕ: непризнанные опции: --with-zlib-dir
...
Решение
Если он не установлен,
а. Загрузить и установить
i) с сайта zlib.net
или
ii) из репо git, как показано ниже
git clone https://github.com/madler/zlib.git
или
III). Использовать источник zlib в исходном каталоге python
Модули /Zlib
б. Установить zlib
./configure --prefix=/usr/local
make
sudo make install
2.Edit/Module/Setup, раскомментируя строку ниже
"#zlib zlibmodule.c -I $(префикс)/include -L $(exec_prefix)/lib -lz"
3. Восстановите Python3.4 из источника снова
cd ${PYTHON_SRC_CODE_DIR}
./configure --prefix=${PYTHON_HOME_DIR}
make
sudo make install
4.Установить установку
Обратите внимание, что gzip зависит от zlib.
nbr_repeation=100
f=open("some_file.txt","at")
for line in range(nbr_repeation):
print('[{}] This file will be compressed using python zlib/gzipmodule'.format(line),file=f)
f.close()
f=open("some_file.txt","rt")
import gzip
gz=gzip.open('some_file.gz', 'wt')
for line in f : gz.write(line)
gz.close() # Like to be clean exit
f.close() # Like a clean exit
"""confirm the creation of the compressed gzip files"""
import os
print([ (file,os.stat(file)[6],"bytes") for file in os.listdir(".") if file.startswith("some")])
Ответ 5
Единственное решение, которое помогло мне в установке python 3.5.1, состояло в том, чтобы apt-get zlib1g-dev (и другие пакеты, такие как python-setuptools и python-pip), а затем пересоздал python 3.5.1 из источника.
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo apt-get install build-essential python-dev python-setuptools python-pip python-smbus
sudo apt-get install build-essential libncursesw5-dev libgdbm-dev libc6-dev
sudo apt-get install zlib1g-dev libsqlite3-dev tk-dev
sudo apt-get install libssl-dev openssl
cd ~
mkdir build
cd build
wget https://www.python.org/ftp/python/3.5.1/Python-3.5.1.tgz
tar -zxvf Python-3.5.1.tgz
cd Python-3.5.1
./configure
make
sudo make install
Взято из: https://github.com/MrYsLab/xideco/wiki/Installing-Python-3.5
Как я понял, новая сборка python выполняется с включением ранее связанных пакетов, связанных с apt-getted.
Поэтому, когда вы просматриваете содержимое новых пакетов Python-3.5.1/lib/site-пакетов, там будут пункты pip и setuptools. Что еще более важно, они будут скопированы в любой виртуальный файл, который вы используете с помощью Python-3.5.1. И этот virtualenv будет использовать THEM insted system-default. Это очень важно, очень важно перезагрузить при установке новой версии python. В противном случае можно попасть в черную дыру, например:
- zlib не установлен;
- "pip install...", выполненный из virtualenv, который устанавливает пакет в python с системным значением вместо virtualenv.
Ответ 6
Самое легкое решение, которое я нашел, находится на python.org:
sudo apt-get build-dep python3.6
Если этот пакет недоступен для вашей системы, попробуйте уменьшить второстепенную версию до тех пор, пока не найдете пакет, доступный в диспетчере системных пакетов.
Если вы видите что-то вроде этого: E: You must put some ‘source’ URIs in your sources.list
, откройте программное обеспечение и обновления и включите исходный код.
Я попытался объяснить подробности, на сообщение в блоге.
Ответ 7
sudo apt-get install zlib1g-dev
это то, что работает для меня.
Ответ 8
sudo apt-get install build-essential python-dev
Несмотря на то, что python-dev предназначен для python2.7, он все равно будет задействовать все необходимые зависимости.
Вам нужно будет:
./configure
make
sudo make install
Чтобы перестроить python3
Ответ 9
Для тех, кто пытается использовать не системный/нестандартный zlib
(например, создание своего собственного из исходного кода), обязательно передайте как CPPFLAGS
(не CFLAGS
!), Так и LDFLAGS
в ./configure
. Например, если ваш zlib
находится в /opt/zlib
:
./configure CPPFLAGS='-I/opt/zlib/include' LDFLAGS='-L/opt/zlib/lib'
make
sudo make install
Я закончил тем, что спустился в кроличью нору, пытаясь выяснить, почему наш Python не собирался с поддержкой zlib, и обнаружил, что CPython setup.py
не смотрит на CFLAGS
для включаемых CPPFLAGS
, только на CPPFLAGS
: https://github.com/python/cpython/blob/master/setup.py#L562
Ответ 10
Для тех, у кого такая же ошибка в MacOS Mojave, это самое простое решение для установки/компоновки заголовочных файлов:
open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg
Затем просто соберите Python снова как обычно (также работает со сборками pyenv).