我有另一个线程询问"缺少zlib"的帮助.有了很好的帮助,问题已经得到解决(差不多).
现在我有兴趣自己构建Python(在Ubuntu 10.10上).
一些重要问题引起了我的注意:
在构建Python(比如2.7.1)之后,如果我缺少模块,是否需要重建Python?
有没有办法在构建Python之前找出哪些模块会丢失?说sqlite3.我为系统默认安装了sqlite3(Python 2.6.6),我可以将它导入到Python 2.6.6 shell中.现在我使用pythonbrew构建2.7.1,并且在shell中我无法导入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.
Run Code Online (Sandbox Code Playgroud)
我得到了sqlite3和readline
sudo apt-get install libreadline6 libreadline6-dev
sudo apt-get install libsqlite3-dev
Run Code Online (Sandbox Code Playgroud)
我试图导入它们,但仍然"没有命名模块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',
]
Run Code Online (Sandbox Code Playgroud)
上面列出的所有路径都不存在.所以我想我必须手动安装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
Run Code Online (Sandbox Code Playgroud)
我进入了安装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
Run Code Online (Sandbox Code Playgroud)
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',
]
Run Code Online (Sandbox Code Playgroud)
再一次,把一切都跑了(这次我也做了干净)
输出在这里: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的开发包
谢谢.
Mic*_*lon 43
以下是如何构建Python并修复任何依赖项.我假设你希望这个Python与Ubuntu发行版Python完全分开,所以我指定--prefix选项将它全部安装在/ home/python27中使用标准的Python布局,即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
Run Code Online (Sandbox Code Playgroud)
第5步是重要的一步.最后,它将显示无法正确构建的任何模块的列表.通常你可以通过安装Ubuntu包并重新运行make来解决这个问题.
a. sudo apt-get install something-dev
b. make
Run Code Online (Sandbox Code Playgroud)
有一个问题是很常见的,因为你缺少某个模块或其他模块的-dev插件.但有时你应该重新开始:
a. make clean
b. ./configure --prefix=/home/python27
c. make
Run Code Online (Sandbox Code Playgroud)
如果你不确定,从不伤害.关于步骤6的重要说明.我没有在此命令上使用sudo,这意味着您需要使用适当的所有权创建/ home/python27目录.
./configure --help |less在构建之前不要犹豫,因为可能有一些有趣的选项可以使用.有一次在一个最小的发行版上我不得不做--with-dbmliborder = gdbm:bdb以便让gdbm工作.当你运行./configure时,最后几行会告诉你它在哪里学到了它所学到的信息.在Python的情况下,模块/设置对于弄清楚如何构建模块非常有用.
另一个有用的事情是make clean然后运行make >make.out 2>&1以捕获完整make过程中的所有输出.然后,在完成后,使用less或编辑器查找问题模块(如_sqlite)的详细信息.例如,检查传递给的所有-I选项gcc.如果列表中没有正确的包含目录,则会导致问题.您可以编辑setup.py以更改包含目录的列表.
在过去,更常见的是通过注销,再次登录以及在执行完全重建之前运行"sudo ldconfig"来解决库问题.
| 归档时间: |
|
| 查看次数: |
57915 次 |
| 最近记录: |