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'

Я решил проблему с помощью следующих шагов.

  1. посетите http://www.zlib.net/ и загрузите zlib-1.2.11.

  2. установить zlib (распаковать, настроить, сделать, выполнить установку).

  3. переустановите 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')
Другие вопросы по тегам