python - 在缺少的模块上构建 Python 等

标签 python ubuntu

我有另一个线程寻求有关“缺少 zlib”的帮助。在很好的帮助下,问题已经(几乎)解决了。

现在我有兴趣自己构建 Python(在 Ubuntu 10.10 上)。

几个重要的问题引起了我的注意:

  1. 构建 Python(比如 2.7.1)后,如果缺少模块,是否需要重新构建 Python?

  2. 有没有办法在构建 Python 之前找出哪些模块会丢失?说sqlite3。我为系统默认(Python 2.6.6)安装了 sqlite3,我可以将其导入 Python 2.6.6 shell。现在我使用 pythonbrew 构建 2.7.1,在 shell 中我无法导入 sqlite3,因为 _sqlite3 不可用。我确信还有一些更重要的缺失是我 future 开发所需要的(例如 Django ..)。

我愿意学习如何在不使用 pythonbrew 的情况下进行构建.

请与我分享您构建另一个版本的 Python 的经验,您将如何解决缺少模块的问题?是否有构建 Python 的实用解决方案?

我从来没有费心自己 build 一个,所以请多多包涵。我开始意识到自己学习和建立自己的重要性!非常感谢!


编辑

首先,我感谢您的所有意见。他们意义重大。我做了建筑。

Python build finished, but the necessary bits to build these modules were not found:
_bsddb             _curses            _curses_panel   
_tkinter           bsddb185           bz2             
dbm                gdbm               readline        
sunaudiodev        _sqlite3                                    
To find the necessary bits, look in setup.py in detect_modules() for the module's name.

我得到了 sqlite3 和 readline 离开了

sudo apt-get install libreadline6 libreadline6-dev
sudo apt-get install libsqlite3-dev

我尝试导入它们,但仍然“没有命名模块 xxxx”。

AskUbuntu实际上,我问人们如何获取以前的命令,因为当我在 Python 2.7.1 shell 中时无法使用该功能。我相信这是由于readline。 Readline

我在这个目录下安装了Python-2.7.1:/home/jwxie518/python27/

我查看了 setup.py,发现了以下几行:

# The sqlite interface
sqlite_setup_debug = False   # verbose debug prints from this script?

# We hunt for #define SQLITE_VERSION "n.n.n"
# We need to find >= sqlite version 3.0.8
sqlite_incdir = sqlite_libdir = None
sqlite_inc_paths = [ '/usr/include',
                     '/usr/include/sqlite',
                     '/usr/include/sqlite3',
                     '/usr/local/include',
                     '/usr/local/include/sqlite',
                     '/usr/local/include/sqlite3',
                   ]

上面列出的所有路径都不存在。 所以我想我必须手动安装 sqlite3?我得到了另一个引用 here (不过是中文的)

# Download the latest and extract
# Go into the extracted directory
./configure --prefix=/home/jwxie518/python27/python
make && make install
# Then edit python-2.7 's setup.py before rebuild it
# Sample (add these two lines to the end....)
'~/share/software/python/sqlite-3.6.20/include',
'~/share/software/python/sqlite-3.6.20/include/sqlite3',

# Then rebuild python like how we did before

我进入了安装 sqlite3 的目录。我只找到了 include/sqlite3.h。所以我回去检查/usr/include/。我也只能找到 sqlite3.h。

那么这里发生了什么? Readline 也是不可导入的。


第三次编辑 我重新开始一切,除了我没有重新安装 sqlite3。

# Extract Python-2.7.1
# cd into Python-2.7.1
# ./configure
make >make.out 2>&1
less make.out

make.out 在这里:http://pastebin.com/raw.php?i=7k3BfxZQ

我仍然无法导入 sqlite3。所以我进入 setup.py 并进行了更改:

# We hunt for #define SQLITE_VERSION "n.n.n"
# We need to find >= sqlite version 3.0.8
sqlite_incdir = sqlite_libdir = None
sqlite_inc_paths = [ '/usr/include',
                     '/usr/include/sqlite',
                     '/usr/include/sqlite3',
                     '/usr/local/include',
                     '/usr/local/include/sqlite',
                     '/usr/local/include/sqlite3',
                     '/home/jwxie518/python-mod/include/sqlite',
                     '/home/jwxie518/python-mod/include/sqlite3',
                   ]

再一次,把所有东西都跑一遍(这次我也做了 ma​​ke clean)

输出在这里:http://pastebin.com/raw.php?i=8ZKgAcWn

根据输出,我认为没有包含自定义路径....(完整输出请到上面的链接搜索sqlite)

build/temp.linux-i686-2.7/home/jwxie518/Python-2.7.1/Modules/_sqlite/util.o -L/usr/lib -L/usr/local/lib -Wl,-R/usr/lib -lsqlite3 -o build/lib.linux-i686-2.7/_sqlite3.so

我仍然无法导入 sqlite3。

谢谢!


非常感谢 Michael Dillon 帮助我。您的教程简洁明了。

当我意识到每当我尝试 Python-2.7.1 时,我就解决了这个问题,我实际上使用的是 Pythonbrew 安装的那个。

故事的寓意是阅读所有错误。我忽略了导入 sqlite3 产生的错误。 Pythonbrew 安装的那个没有安装 sqlite3。在 Pythonbrew 安装 Python-2.7.1 之后安装 sqlite3 的开发包

谢谢。

最佳答案

这是构建 Python 和修复任何依赖项的方法。我假设您希望此 Python 与 Ubuntu 版本 Python 完全分离,因此我指定 --prefix 选项以使用标准 Python 布局将其全部安装在/home/python27 中,即 site-packages 而不是 dist-包。

1. Get the .tar.gz file into your own home directory.
2. tar zxvf Py*.tar.gz
3. cd Py*1
4. ./configure --prefix=/home/python27
5. make
6. make install

第 5 步是重要的一步。最后,它将显示无法正确构建的所有模块的列表。通常,您可以通过安装 Ubuntu 软件包并重新运行 make 来解决此问题。

a. sudo apt-get install something-dev
b. make

出现问题是很常见的,因为您缺少某些模块或其他模块的 -dev 插件。但有时你应该这样重新开始:

a. make clean
b. ./configure --prefix=/home/python27
c. make

如果您不确定,重新开始永远不会受到伤害。关于第 6 步的重要说明。我没有在此命令上使用 sudo,这意味着您需要已创建具有适当所有权的/home/python27 目录。

在构建之前不要犹豫尝试 ./configure --help |less,因为您可能会使用一些有趣的选项。有一次,在一个最小的发行版上,我必须 --with-dbmliborder=gdbm:bdb 才能让 gdbm 工作。当你运行 ./configure 时,最后几行会告诉你它把学到的信息放在哪里。对于 Python,Modules/Setup 有助于弄清楚如何构建模块。

另一件有用的事情是make clean 然后运行make >make.out 2>&1 以捕获完整make 过程的所有输出。然后,完成后,使用 less 或编辑器查找问题模块的详细信息,例如 _sqlite。例如,检查所有传递给 gcc 的 -I 选项。如果正确的包含目录不在会导致问题的列表中。您可以编辑 setup.py 以更改包含目录的列表。

在过去,更常见的是通过注销、再次登录并在完全重建之前运行“sudo ldconfig”来解决库问题。

关于python - 在缺少的模块上构建 Python 等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6171210/

相关文章:

ubuntu - VNC 连接到 Ubuntu EC2

shell - 使用 "become: true"在 Ansible 不工作的情况下更改默认 shell

python - 替代 python 文档

python - 字典中使用的属性的 Setter

python - Altair:如何根据最大值在面网格中对线条进行不同的样式设计?

linux - Ubuntu 总是丢失 resolv.conf 设置?

ubuntu - 路径问题 : Could not find valid SPARK_HOME while searching

python - 从 Ubuntu+PYODBC 连接到 SQL Server 时出错

python - 如何从 Pandas 数据框中删除具有特定属性值的部分行

python - 将整数列表形式的 python 字符串转换为适当的整数列表