Zlib и binascii не собираются с Python3.6
Я пытался собрать Python3.6.1 из исходного кода на Ubuntu 14.04. Последовательность команд соответствует README:
./configure
make
make test
Последний падает, потому что он не может импортировать binascii. В его выводе есть следующее:
Following modules built successfully but were removed because they could not be imported:
binascii zlib
Пытаясь пропустить make test
и начать make install
У меня сбой после неудачного импорта zlib
, Некоторые участники форумов Ubuntu предложили обновить все пакеты zlib из репозиториев. Это не помогает Как это исправить?
1 ответ
Попробуйте установить zlib из исходного кода ( http://www.zlib.net/) вручную (не через yum/apt-get/brew...).
Я пробовал сборку Python3.6.1 в моем Mac-dev и также столкнулся с вашей проблемой. Жалуется на следующее сообщение после внесения.
Python build finished successfully!
The necessary bits to build these optional modules were not found:
... zlib ...
И я не могу импортировать zlib в интерактивную оболочку тоже.
>>> import zlib
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named 'zlib'
Я решил проблему с помощью следующих шагов.
посетите http://www.zlib.net/ и загрузите zlib-1.2.11.
установить zlib (распаковать, настроить, сделать, выполнить установку).
переустановите Python3.6.1 (сделайте чистым, сделайте).
Я обнаружил, что процесс создания больше не жаловался на отсутствие zlib, и я мог успешно импортировать zlib в оболочку.
На самом деле, для решения такого рода проблем мы могли бы найти некоторые подсказки из исходного кода. Мы можем найти следующий код в "setup.py", и комментарии очень полезны. Мы можем изменить код с помощью отладочной информации, чтобы определить, где на самом деле проблема (для меня это потому, что первое, если проверка не удалась из-за отсутствия zlib.h).
# You can upgrade zlib to version 1.1.4 yourself by going to
# http://www.gzip.org/zlib/
zlib_inc = find_file('zlib.h', [], inc_dirs)
have_zlib = False
if zlib_inc is not None:
zlib_h = zlib_inc[0] + '/zlib.h'
version = '"0.0.0"'
version_req = '"1.1.3"'
if host_platform == 'darwin' and is_macosx_sdk_path(zlib_h):
zlib_h = os.path.join(macosx_sdk_root(), zlib_h[1:])
with open(zlib_h) as fp:
while 1:
line = fp.readline()
if not line:
break
if line.startswith('#define ZLIB_VERSION'):
version = line.split()[2]
break
if version >= version_req:
if (self.compiler.find_library_file(lib_dirs, 'z')):
if host_platform == "darwin":
zlib_extra_link_args = ('-Wl,-search_paths_first',)
else:
zlib_extra_link_args = ()
exts.append( Extension('zlib', ['zlibmodule.c'],
libraries = ['z'],
extra_link_args = zlib_extra_link_args))
have_zlib = True
else:
missing.append('zlib')
else:
missing.append('zlib')
else:
missing.append('zlib')