【问题标题】:How would I build python myself from source code on Ubuntu?我如何从 Ubuntu 上的源代码自己构建 python?
【发布时间】:2011-11-11 16:43:17
【问题描述】:

Ubuntu 预装了 Python 2.7.2+。 (我还下载了 python 开发包。)由于我遇到的另一个问题(在 How do I replace/update the version of the expat library used by Apache? 中进行了深入解释),Graham Dumpleton 告诉我我的发行版明确构建了 Python 以使用外部 pyexpat 实现,所以导致我的问题。他还说我可以自己从源代码构建 Python 来解决这个问题。我将如何在 Ubuntu 上执行此操作? (请记住,我是 Linux 新手。)

【问题讨论】:

  • 如果你在这里没有得到答案,更多的 Ubuntu 人可能会在 askubuntu.com 上看到这个问题
  • 这并不是真正的 ubuntu 特定的,所以我认为这里没问题。在我看来,各种堆栈交换站点有相当大的重叠。

标签: python linux ubuntu


【解决方案1】:
  1. 在 shell 提示符下(在终端中),运行

    sudo apt-get install build-essential 
    

    这将获取构建任何东西所需的所有常用包(例如编译器等)。

  2. 然后运行

    sudo apt-get build-dep python2.7
    

    这将获取构建 python 所需的所有库。

  3. 然后下载python的源代码并解压到一个目录中。

  4. 去那里跑

    ./configure --prefix=/path/where/you/want/python/installed
    
  5. 然后make 然后make install 构建和安装它:

    make && make install
    

如果您在途中遇到障碍,请在此处询问,我会尽力提供一些指导。

【讨论】:

  • 当我运行sudo apt-get build-dep python2.7 时,它说“E:你必须在你的sources.list 中放一些'源' URIs”。任何想法? (另外,小注:我认为你的意思是写 sudo apt-get install build-essential 没有 -s 在第一个命令的“基本”末尾。)
  • 他们在构建 Python 时还需要 --enable-shared 选项,因为他们希望将它与 mod_wsgi 一起使用,并且 Python 默认不构建共享库,这对于动态加载嵌入式系统来说并不理想。
  • 什么是“他们”?你指的是什么?另外,在此之前,我该如何解决错误消息?我需要在 sources.list 中添加一些东西吗?
  • Brian:您可能需要在sources.list 中添加deb-src 行和deb 行。
  • 我认为最好使用 altinstall 而不是 install docs.python.org/3/using/unix.html#building-python
【解决方案2】:

构建“热”最近的python(来自github)的最佳方法如下:

  sudo apt-get update \
  && sudo apt-get install -y build-essential git libexpat1-dev libssl-dev zlib1g-dev \
  libncurses5-dev libbz2-dev liblzma-dev \
  libsqlite3-dev libffi-dev tcl-dev linux-headers-generic libgdbm-dev \
  libreadline-dev tk tk-dev

  git clone https://github.com/python/cpython.git
  cd cpython && ./configure --prefix=/usr \
  --enable-loadable-sqlite-extensions \
  --enable-shared \
  --with-lto \
  --enable-optimizations \
  --with-system-expat \
  --with-system-ffi \
  --enable-ipv6 --with-threads --with-pydebug --disable-rpath \
  && make \
  && sudo make install

它从 github 上的源代码构建最近的 python。

有了这个我已经建立了Python 3.8.0a0 (heads/master:077059e0f0, Aug 10 2018, 21:36:32)

【讨论】:

  • 我会运行 sudo make altinstall 这样你就不会覆盖系统默认的 python3 版本。例如,如果您在 Ubuntu 18.04 上执行 make install,您将覆盖 /usr/bin/python3
  • 对于使用 pydebug 构建,您的 make 应该是 make EXTRA_CFLAGS="-DPy_REF_DEBUG"
  • 在我使用 Python 3.7.0 源代码的 Xubuntu 18.04 机器上,它显示 WARNING: unrecognized options: --with-threads
  • 这个会用 bz2 构建吗?我在尝试导入熊猫时遇到了这个问题。谢谢。
  • 它不会编译 bz2
【解决方案3】:

自己构建 Python 的最佳解决方案是 pythonbrew,它可以自动执行该过程,并且不仅可以安装多个不同的版本,还可以轻松地在它们之间进行选择。

2016 年,pyenv 和 PyRun 是最可行的解决方案。

【讨论】:

  • 该工具的 +1。成熟到什么程度?你有亲身经历吗?
  • @NoufalIbrahim:我使用pythonzpythonbrew 的简化分支)。它像宣传的那样工作:它自动下载源代码并手动构建它们的过程。
  • 此工具不再维护。
【解决方案4】:

您可以尝试使用pyenv。我还没试过。但是看看源代码,在任何 *ix 系统上完成任何 CPython 解释器的安装似乎非常成熟。

【讨论】:

  • 我同意,如果您认真对待使用 python 进行开发,您会发现自己使用多个版本,而 pyenv 会为您解决这个问题。但你真的想在安装任何版本的python之前先安装pyenv(如果可能的话......)
【解决方案5】:

您可以使用 checkinstall 从源代码安装而不是 make install。

下载源代码后,导航到主文件夹并使用以下命令

./configure
make
sudo checkinstall

这将创建一个 debian / RPM 包,然后安装它。 Checkinstall 保留所有文件修改和依赖项的标签,并使整个卸载过程更容易。由于您有一个 .deb 包,因此在许多系统上安装并使用包管理器处理会容易得多。

来源:Checkinstall - install from source code

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-09
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 2015-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多