当前位置: 首页 > 面试题库 >

在缺少的模块上构建Python等

黄昊英
2023-03-14
问题内容

我有另一个线程在“缺少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,并且在外壳程序中无法导入sqlite3,因为_sqlite3不可用。我确信还有一些更重要的内容需要我将来的开发(例如Django ..)。

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

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

我从来没有打扰自己一个人,所以请忍受我。我开始意识到学习和建立自己的重要性!非常感谢你!

编辑

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

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吗?我在这里有另一个参考
(不过是中文)

# 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也不重要。

3RD EDIT 我重新开始了一切,除了没有重新安装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',
                   ]

然后,再次将所有内容都 清理干净 (这次我也做了 清理工作

输出在这里: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。在SQLbrew安装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在构建某些东西之前不要犹豫,因为您可能会使用一些有趣的选项。为了使gdbm正常运行,我不得不在一个最小的发行版上做一次–with-
dbmliborder =
gdbm:bdb。当您运行./configure时,最后几行将告诉您将所学信息放在何处。对于Python,“模块/设置”有助于弄清楚如何构建模块。

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

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



 类似资料:
  • 问题内容: 我已安装在主目录中。 我正在尝试运行一个需要python 2.7.x版本的脚本,而我却丢失了bz2错误 我尝试安装bz2模块,但出现很多错误 问题答案: 可能是从源代码构建python时,没有bz2标头。 在Ubuntu / Debian上安装它们: 软呢帽: 并再次构建python。您可能会注意到python在配置/构建时会检查很多库,如果您错过其中的一些库,那么您的案例可能就不会支

  • 问题内容: 我已经配置了jenkins来构建我的ios- swift应用程序。我使用过xcode版本8.1和swift版本3。我是Jenkins的新手,并继续集成过程。根据我的控制台输出,我认为构建成功。因为这样的控制台输出打印 但是在此控制台输出打印失败消息之后。 我这样的gofinal控制台输出。 与此相关的问题是什么? 问题答案: 经过广泛的研究,我终于找到了解决该问题的方法。我所做的第二个

  • 我正在使用普克气流图像,并通过编辑dockerfile升级气流版本,其中包括谷歌和安装的apache-气流提供商-谷歌2.2.0作为python依赖项和谷歌或gcs作为气流依赖,当我使用构建容器时使用 我还将python包添加到我的要求.txt文件,该文件在下面列出,但是当我在本地主机上进入气流时,它仍然显示“损坏的DAG:[/usr/本地/气流/dags/其他文件夹/dag.py]没有名为'go

  • NPM包未在Windows 8.1上构建-失败,出现以下错误,

  • 问题内容: 这个问题已经在这里有了答案 : 在代码中安装python模块 (8个答案) 4年前关闭。 我希望能够写: 建议/惯用的处理这种情况的方式是什么? 我已经看到很多脚本只是简单地输出错误或警告,以通知用户有关缺少的模块的信息,并且(有时)提供有关如何安装的说明。但是,如果我知道该模块在PyPI上可用,那么我可以肯定地采取进一步措施来启动安装过程。没有? 问题答案: 安装问题不是源代码的主题

  • 我正在将一个EJB项目部署为Jboss WildFly18中的EAR。我的耳朵目前的布局是这样的: 我尝试过通过jboss-deployment-structure.xml和manifest.mf定义依赖关系,但没有成功。我还尝试用包名(即com.tura.common)命名依赖项,因为我已经看到这两种格式都使用过。还是没运气。我不太确定我在这里错过了什么;看来我是在按照预期的布局。有谁能帮忙吗?