1

我想在我的 SLE 11 (OpenSUSE) 上从头开始构建 Python 3.3.2。

在 Python 的编译过程中,我收到了 modules 的消息_bz2_sqlite并且_ssl还没有被编译。

我用各种搜索引擎寻找解决方案。人们常说你必须-dev用你的包管理系统安装包,但我没有 root 访问权限。

我下载了缺失库的源包,但我不知道如何告诉 Python 使用这些库。有人可以帮助我吗?

4

2 回答 2

1

简短的回答是你从源代码配置这些包并将它们放在你的主目录中的某个地方,比如./configure --prefix=$HOME/opt.

该路径$HOME/.local也可能是一个不错的选择,因为许多发行版似乎已经包含$HOME/.local/bin在用户$PATH中(这是pip install --user默认情况下在 Linux 平台上放置可执行文件的地方)。

然后,通过将额外的标志传递给编译器和链接器,告诉 Python 构建过程使用该位置的库。我将使用 SQLite 的示例进行_sqlite3扩展,因为这是我今天必须做的,所以我知道这是可行的:

# build and install SQLite from the autoconf version of the "amalgamated"
# source, available at https://www.sqlite.org/download.html
cd /path/to/sqlite-source
./configure --prefix=$HOME/opt
make -j8  # 8 parallel tasks
make install

# tell the C/C++ preprocessor to also look for headers in $HOME/opt/include
export CPPFLAGS="-I$HOME/opt/include"

# tell the linker to write $HOME/opt/lib into the runtime path of any binaries
# it creates; also tell it to look for extra libraries in $HOME/opt/lib
export LDFLAGS="-Wl,-rpath=$HOME/opt/lib -Wl,-rpath=$HOME/opt/lib64 \
                -L$HOME/opt/lib -L$HOME/opt/lib64"

# tell the compiler to optimize at level 3 (optional)
export CFLAGS="-O3"

# tell Python to build into your home directory; CFLAGS, CPPFLAGS, and
# LDFLAGS are automatically picked up from the environment
cd /path/to/python-source
./configure --prefix=$HOME/opt --enable-shared --enable-optimizations
make -j8 && make install

# add $HOME/opt/bin to your $PATH
cp -i ~/.bash_profile ~/.bash_profile-$(date +%Y%m%d)
echo -e '
# add homebrew software in $HOME/opt to $PATH
export PATH="$HOME/opt/bin:$PATH"' >> ~/.bash_profile

如果您提前定义它们,就像我在上面所做的那样,如果您希望获取它们,则必须编辑与构建相关的环境变量(CFLAGS等) exportconfigure

您需要注销并重新登录才能使您的更改$PATH生效。您也可以修改您的$PATHin ~/.bashrc,但这也有缺点。(实际上,两者都有缺点,但这是另一个话题。)

此 SO 答案中提供了更多详细信息。

于 2019-09-26T20:32:33.660 回答
0

我不使用那个发行版,而是 Linux Mint(它基于 Ubuntu)。

在编译 Python 3.3.2 之前,我已经安装了必要的 -dev 库: $ sudo apt-get install libssl-dev $ sudo apt-get install libbz2-dev ...

然后我编译并安装了 Python,这些导入工作正常。

希望你觉得它有用

莱昂

于 2013-07-31T19:33:17.710 回答