Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用zlib支持从源代码构建Python_Python_Python 3.x - Fatal编程技术网

使用zlib支持从源代码构建Python

使用zlib支持从源代码构建Python,python,python-3.x,Python,Python 3.x,在Ubuntu 12.04上从源代码构建Python 3.2.3时,zlib模块不可用 我从python.org下载了官方的源代码发行版,并尝试使用以下命令构建和安装它 tar xfa Python3.2.3.tar.bz2 cd Python-3.2.3 ./configure --prefix=/opt/python3.2 make sudo make install yum groupinstall "Development tools" yum install zlib-devel b

在Ubuntu 12.04上从源代码构建Python 3.2.3时,zlib模块不可用

我从python.org下载了官方的源代码发行版,并尝试使用以下命令构建和安装它

tar xfa Python3.2.3.tar.bz2
cd Python-3.2.3
./configure --prefix=/opt/python3.2
make
sudo make install
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
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                                            
运行
makeinstall
并启动解释器后,无法导入
zlib
模块

我确认我的系统上安装了
zlib1g dev
软件包


我还发现,这建议在
/configure
命令中添加
--with zlib
标志。但是,这会返回一个错误,即它是一个无法识别的选项,并且没有任何效果。

解决方案是安装Ubuntu软件包
dpkg dev

sudo apt-get install dpkg-dev
解释了原因

简而言之,Ubuntu的最新版本没有将
libz.so
存储在标准的
/usr/lib
位置,而是存储在特定于平台的位置。例如,在我的系统上是在
/usr/lib/x86_64-linux-gnu
中。这会阻止Python的构建系统找到它

dpkg-dev
包安装了
dpkg体系结构
可执行文件,使Python能够找到必要的库


最初的问题是关于Python 3.2.3的。我还下载了Python 2.7.3,并确认存在相同的问题,此解决方案也适用于它。

我在CentOS 6.3和Python 3.2.3上也遇到类似的问题

我通过以下方式解决了这个问题:

编辑
/Modules/Setup
并取消对行的注释:

zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz
更改为目录/Modules/zlib:

./configure
make
sudo make install
然后编译了我的python3.2源代码

然后能够测试导入zlib,并且一切正常:)

即使Pythondev是针对python2.7的,它仍然会引入所有必要的依赖项

然后,您需要执行以下操作:

./configure
make
sudo make install

要重建python3,我正在使用CentOS 6.6,并且收到了zlib错误。这里提出的其他答案对我都不起作用(包括CentOS 6.3对模块/设置中取消行注释的修复)。我使用以下命令修复了它

tar xfa Python3.2.3.tar.bz2
cd Python-3.2.3
./configure --prefix=/opt/python3.2
make
sudo make install
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
现在我可以在/usr/local/bin/python2.7中导入zlib了,没有问题


在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

问题
  • 使用python3.4时zlib不可用

    $python3.4 get-pip.py 回溯(最近一次呼叫最后一次): 文件“get pip.py”,第20204行,在 main() 文件“getpip.py”,第152行,在main中 引导(tmpdir=tmpdir) bootstrap中第82行的文件“get pip.py” 进口pip zipimport.ZipImportError:无法解压缩数据;zlib不可用

  • 重建Python失败

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

  • 。。。 配置:警告:无法识别的选项:--使用zlib dir

    解决方案
  • 确保安装了zlib。 默认情况下,它将安装在/usr/lib中

    ls/usr/lib/libz*

  • 如果没有安装, A.下载并安装 i) 从zlib.net站点 或 ii)来自如下所示的git回购

    git clone https://github.com/madler/zlib.git 
    
    或 (iii)。使用python源目录中的zlib源代码 模块/zlib

    b。安装zlib

    ./configure --prefix=/usr/local
    make
    sudo make install 
    
    2.通过取消注释下一行来编辑/Module/Setup “#zlib zlibmodule.c-I$(前缀)/include-L$(exec_前缀)/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")])
    

    帮助我安装Python3.5.1的唯一解决方案是获取zlib1g dev(以及其他软件包,如python setuptools和python pip),然后从源代码重新构建Python3.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
    
    摘自:

    正如我所理解的,python的新构建包含了以前apt获取的相关包。 因此,当您浏览新Python-3.5.1/lib/site-packages的内容时,将出现pip和setuptools。更重要的是,它们将被复制到您使用Python-3.5.1创建的任何virtualenv中,并且该virtualenv将使用它们而不是系统默认值。在安装新的python版本时,请记住这一点非常重要。否则,可能会陷入错误的黑洞,例如:

    • zlib未安装
    • “pip安装…”从virtualenv执行,它将包安装到系统默认python而不是virtualenv

      • 我找到的最简单的解决方案是:

        如果该软件包不适用于您的系统,请尝试减少次要版本,直到在系统的软件包管理器中找到可用的软件包

        如果您看到这样的情况:
        E:您必须在源代码中添加一些“源”URI。列出
        ,打开软件和更新并启用源代码


        我试图在上解释详细信息。

        sudo apt get install zlib1g dev


        对于任何试图使用非系统/非标准
        zlib
        (例如,从源代码构建自己的zlib)的人,请确保将
        CPPFLAGS
        (而不是
        CFLAGS
        !)和
        LDFLAGS
        传递到
        /配置
        。例如,如果您的
        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

        对于在macOS Mojave上出现相同错误的任何人,这是安装/链接头文件的最简单解决方案:

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

        然后像往常一样重新构建Python(也适用于构建)。

        我希望回答我自己的问题不会太糟糕。我花了几个令人沮丧的小时来解决这个问题,而我最终找到解决方案的地方(链接在我下面的答案中)却相当模糊。希望把它放在这里能让其他人更容易找到。我推荐跑步