Подтвердить что ты не робот

Создание 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. Тем не менее, это возвращает ошибку, которая является непризнанной и не имеет никакого эффекта.

4b9b3361

Ответ 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 ...

Решение

  • Убедитесь, что zlib установлен. По умолчанию он будет установлен в /usr/lib

    ls/usr/lib/libz. *

Если он не установлен, а. Загрузить и установить 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).