为Python安装准备_tkinter和sqlite3(无管理员权限)
我尝试直接从源代码构建Python,没有管理员权限,运行后: 导出CPPFLAGS='-I/opt/sqlite-3.7.16.2/include-I/opt/tk8.6.0/include为Python安装准备_tkinter和sqlite3(无管理员权限),python,tkinter,Python,Tkinter,我尝试直接从源代码构建Python,没有管理员权限,运行后: 导出CPPFLAGS='-I/opt/sqlite-3.7.16.2/include-I/opt/tk8.6.0/include -I/opt/tcl8.6.0/include/' 导出LDFLAGS='-L/opt/sqlite-3.7.16.2/lib-L/opt/tk8.6.0/lib/ -L/opt/tcl8.6.0/lib//configure--prefix=/path_to_python-2.7.4--enable sh
-I/opt/tcl8.6.0/include/' 导出LDFLAGS='-L/opt/sqlite-3.7.16.2/lib-L/opt/tk8.6.0/lib/
-L/opt/tcl8.6.0/lib//configure--prefix=/path_to_python-2.7.4--enable shared' 然后
make
我得到以下信息:
建筑“\u tkinter”扩建
gcc-pthread-fPIC-fno严格别名
-g-O2-DNDEBUG-g-fwrapv-O3-Wall-Wstrict原型-DWITH_APPINIT=1-I/usr/X11/include-I-IInclude-I./include-I/opt/sqlite/sqlite-3.7.16.2/include-I/opt/tk8.6.0/include-I/opt/tcl8.6.0/include-I/usr/local/include-I/opt/python/src/python-2.7.4/include-I/opt/python/python/src/src/python/python-2.7.4/kino/t4模块build/temp.linux-x86\u 64-2.7/opt/python/src/python-2.7.4/Modules/\u tkinter.o
gcc-pthread-fPIC-fno严格别名-g-O2-DNDEBUG-g-fwrapv-O3
-Wall-Wstrict原型-DWITH_APPINIT=1-I/usr/X11/include-I-IInclude-I./include-I/opt/sqlite/sqlite-3.7.16.2/include-I/opt/tk8.6.0/include-I/opt/tcl8.6.0/include-I/usr/local/include-I/opt/python/python/src/python-2.7.4/include-I/opt/python/src/python/src/src/python-2.7.4/t.c/c/t-kapo-cbuild/temp.linux-x86_64-2.7/opt/python/src/python-2.7.4/Modules/tkappinit.o
gcc-pthread-shared-L/opt/sqlite/sqlite-3.7.16.2/lib
-L/opt/tk8.6.0/lib/-L/opt/tcl8.6.0/lib/-L/opt/sqlite/sqlite-3.7.16.2/lib-L/opt/tk8.6.0/lib/-L/opt/tcl8.6.0/lib/-I.-IInclude-I./Include-I/Include-I/opt/sqlite/sqlite-3.7.16.2/Include-I/opt/tk8.6.0/Include-I/opt/tcl8.6.0/Include-I/tcl8.6.0/tcl8.0/Include-temp.6/linux-6/u 64-2.7/x82/python.7/python/python/python
build/temp.linux-x86_64-2.7/opt/python/src/python-2.7.4/Modules/tkappinit.o
-L/usr/X11/lib-L/opt/sqlite/sqlite-3.7.16.2/lib-L/opt/tk8.6.0/lib/-L/opt/tcl8.6.0/lib/-L/usr/local/lib-L.-ltk8.6-ltcl8.6-lX11-lpython2.7-o build/lib.linux-x86\u 64-2.7//tkinter.so
*警告:导入失败后重命名“\u tkinter”:libtk8.6.so:无法打开共享对象文件:没有此类文件或目录
奇怪的是我可以看到libtk8.6.so
。它实际上就在/opt/tcl8.6.0/lib
下面,正如我用LDFLAGS
指定的那样
为什么编译失败?当Python尝试导入
\u tkinter
时,在setup.py
中安装时会出现此问题。如果查看函数build\u extension
,会有一个块显示:
imp.load_dynamic(ext.name, ext_filename)
此行尝试动态加载\u tkinter
(使用动态共享库libtk8.6.so
)。因此,尽管编译/链接工作正常,但当Python测试模块时,它使用动态库,而我在LD\u library\u PATH
中没有tcl/lib或tk/lib。一旦我加上这些,一切都很好
总之:
我必须通过CPPFLAGS
/path\u to/sqlite3/include
/path\u to/tcl/include
/path\u to/tk/include
LDFLAGS
/path\u to/sqlite3/lib
/path\u to/tcl/lib
/path\u to/tk/lib
LD_LIBRARY_PATH
的以下库路径:
/path\u to/sqlite3/lib
/path\u to/tcl/lib
/path\u to/tk/lib