为Python安装准备_tkinter和sqlite3(无管理员权限)

为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

我尝试直接从源代码构建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 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
有了这些,一切都正常了