building Python from source with zlib support

后端 未结 10 750
广开言路
广开言路 2020-11-28 04:18

When building Python 3.2.3 from source on Ubuntu 12.04, the zlib module is not available.

I downloaded the official source distribution from python.org, and attempte

相关标签:
10条回答
  • 2020-11-28 04:50

    For anyone who's trying to use a non-system / non-standard zlib (e.g. building your own from source), make sure to pass both CPPFLAGS (not CFLAGS!) and LDFLAGS to ./configure. For example, if your zlib is in /opt/zlib:

    ./configure CPPFLAGS='-I/opt/zlib/include' LDFLAGS='-L/opt/zlib/lib'
    make
    sudo make install
    

    I ended up going down the rabbit hole trying to figure out why our Python wasn't building with zlib support and found out that the CPython setup.py does not look at CFLAGS for include dirs, only CPPFLAGS: https://github.com/python/cpython/blob/master/setup.py#L562

    0 讨论(0)
  • 2020-11-28 04:52

    I was having the same error while working on MAC

    My MAC OS version

    $ 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 is used here

    Issue(s)

    1. zlib not available while using python3.4

      $ python3.4 get-pip.py Traceback (most recent call last): File "get-pip.py", line 20204, in main() File "get-pip.py", line 152, in main bootstrap(tmpdir=tmpdir) File "get-pip.py", line 82, in bootstrap import pip zipimport.ZipImportError: can't decompress data; zlib not available

    2. Rebuilding Python fails

      ./configure --with-zlib-dir=/usr/local/lib

    ... configure: WARNING: unrecognized options: --with-zlib-dir ...

    Solution

    1. Ensure zlib is installed . By default it will be installed in /usr/lib

      ls /usr/lib/libz.*

    If not installed, a. download and install i)from zlib.net site or ii) from a git repo like the below

    git clone https://github.com/madler/zlib.git 
    

    or iii). Use the zlib source in the python source directory Modules/zlib

    b. Install zlib

    ./configure --prefix=/usr/local
    make
    sudo make install 
    

    2.Edit /Module/Setup by uncommenting the line below "#zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz "

    3.Rebuild the Python3.4 from source again

    cd ${PYTHON_SRC_CODE_DIR}  
    ./configure --prefix=${PYTHON_HOME_DIR}
    make
    sudo make install 
    

    4.Confirm installation Please note gzip depends on 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")])
    
    0 讨论(0)
  • 2020-11-28 04:53

    The only solution that helped me with installing python 3.5.1 was to apt-get zlib1g-dev (and other packages such as python-setuptools and python-pip) and then rebuild python 3.5.1 from source.

    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
    

    Taken from: https://github.com/MrYsLab/xideco/wiki/Installing-Python-3.5

    As I undestand new build of python is made with inclusion of previously apt-getted related packages. So when you browse the content of new Python-3.5.1/lib/site-packages there will be pip and setuptools. More importantly, they will be copied to any virtualenv you make using Python-3.5.1 AND this virtualenv will use THEM insted of system-default. This is very, very important to rememmber when installing new python version. Otherwise one might get into a black hole of errors such as:

    • zlib not installed;
    • "pip install ..." executed from virtualenv that installs package to system-default python instead of virtualenv.
    0 讨论(0)
  • 2020-11-28 05:04
    sudo apt-get install build-essential python-dev
    

    Even though python-dev is for python2.7 it will still bring in all the necessary dependencies.

    You will then need to do:

    ./configure
    make
    sudo make install
    

    To rebuild python3

    0 讨论(0)
  • 2020-11-28 05:06

    For anyone having the same error on macOS Mojave, this is the easiest solution for installing/linking the header files:

    open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg
    

    Then just build Python again as usual (also works with pyenv builds).

    0 讨论(0)
  • 2020-11-28 05:07

    The solution is to install the Ubuntu package dpkg-dev.

    sudo apt-get install dpkg-dev
    

    The reason is explained here.

    In short, recent versions of Ubuntu don't store libz.so in the standard /usr/lib location, but rather in a platform specific location. For example, on my system is is in /usr/lib/x86_64-linux-gnu. This prevents Python's build system from finding it.

    The dpkg-dev package installs the dpkg-architecture executable, which enables Python to find the necessary libraries.

    The original question was about Python 3.2.3. I also downloaded Python 2.7.3 and confirmed that the same problem exists, and this solution is applicable to it as well.

    0 讨论(0)
提交回复
热议问题