我试图直接从源代码构建Python,没有管理员权限,并且在运行后:

出口CPPFLAGS ='-I / opt / sqlite-3.7.16.2 / include -I / opt / tk8.6.0 / include
-I / opt / tcl8.6.0 / include /'

export 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

我得到以下内容:

建立'_tkinter'扩展名

gcc -pthread -fPIC -fno-strict-aliasing -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 / src / Python-2.7.4 -c /opt/python/src/Python-2.7.4/Modules/_tkinter.c- o build / temp.linux-x86_64-2.7 / opt / python / src / Python-2.7.4 / Modules / _tk​​inter.o

gcc -pthread -fPIC -fno-strict-aliasing -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 / src / Python-2.7.4 -c /opt/python/src/Python-2.7.4/Modules/tkappinit.c- o build / 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 / opt / sqlite / sqlite-3.7.16.2 / include -I / opt / tk8.6.0 / include -I / opt / tcl8.6.0 / include build / temp.linux-x86_64-2.7 /opt/python/src/Python-2.7.4/Modules/_tkinter.o 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_64-2.7 / _tk​​inter.so

*警告:由于导入“ _tkinter”失败,因此重命名失败:libtk8.6.so:无法打开共享库文件:没有此类文件或目录

奇怪的是,我可以看到libtk8.6.so 正如我用LDFLAGS指定的那样,它实际上就在/opt/tcl8.6.0/lib下。

为什么编译失败?

===============>>#1 票数:5 已采纳

当Python尝试导入_tkinter时,会在setup.py安装过程中发生此问题。 如果您查看功能build_extension ,那么将显示一个块:

imp.load_dynamic(ext.name, ext_filename)

该行尝试动态加载_tkinter (使用动态共享库libtk8.6.so )。 因此,即使编译/链接有效,当Python测试模块时,它仍使用动态库,并且LD_LIBRARY_PATH没有tcl / lib或tk / lib。 一旦添加了这些,一切都很好。

总结:我必须通过CPPFLAGS添加以下包含路径

  • /path_to/sqlite3/include
  • /path_to/tcl/include
  • /path_to/tk/include

通过LDFLAGS的以下lib路径

  • /path_to/sqlite3/lib
  • /path_to/tcl/lib
  • /path_to/tk/lib

以及通过LD_LIBRARY_PATH的以下lib路径:

  • /path_to/sqlite3/lib
  • /path_to/tcl/lib
  • /path_to/tk/lib

有了这些,一切都正常了。

  ask by Amelio Vazquez-Reina translate from so

未解决问题?本站智能推荐:

1回复

Python sqlite3,tkinter显示多行

我是python的新手,最近我使用带tkinter的Python和Sqlite3制作字典。 当我运行代码时,它在IDLE中返回多行,但在GUI中它仅显示最后一个结果。 我想在GUI中显示所有信息。 感谢您的帮助和建议。
1回复

Python3,Tkinter,SQLite3-登录编码错误

尝试验证凭据时出现问题(我将在下面发布代码)。 我想知道是否正在发生,因为我在数据库中将用户名和密码存储为字符串,是否应该将其存储为整数? 问题:我认为简单地举例说明问题是更容易的,也许更容易理解。 正确的信息(用户名=密码,密码=测试) 示例1:您输入“ something
1回复

以管理员身份运行python脚本时创建的tkinter窗口的两个实例

我正在使用tkinter UI开发小型应用程序,该应用程序具有一个窗口以及一个带有三个输入和一个按钮的小型表单。 它需要以管理员权限运行( C:\\某些文件操作)。 我使用以下代码,它工作正常。 我面对的唯一问题是当我运行python script(.py)时,它会创建同一窗口的
2回复

将sqlite3与Tkinter链接

作为我正在制作的库存系统的一部分,我希望Tkinter通过用户输入输入框并单击“添加库存”按钮来收集希望插入数据库的数据值。 我的问题是,我不确定如何将sqlite3与Tkinter代码结合使用。 以下是我的“添加库存”窗口的Tkinter代码 以下是我希望与Tkinter代
1回复

登录成功后,Python,Tkinter,SQlite3将用户重定向到新窗口

我是编程中的新手,我创建了以下源代码来验证用户是否成功登录。 我想在用户输入条目中的正确凭据后,将用户重定向到新窗口并摆脱当前窗口。 是否可以使用顶级方法?
1回复

如何使用tkinter Python创建搜索表单以从SQLITE3数据库进行搜索?

我想使用Tkinter创建一个搜索表单,用户可以在其中输入他们想要从SQLite3数据库中看到的名称。 名为New_Assignment的数据库包含有关人员的所有详细信息。 但是我对如何将Tkinter连接到数据库并使用名称进行搜索感到困惑? 到目前为止,这就是我所得到的。
1回复

从Tkinter Frame更新sqlite3 dababase

我正在尝试使用此功能更新sqlite3数据库,但似乎无法正确传递参数。 通过在tkinter框架中手动进行的选择来拾取人。
1回复

python sqlite3 tkinter-如何为sqlite表中的每一行自动创建新的小部件?

我正在使用tkinter和sqlite3的项目。 在tk.Toplevel窗口中,我有一个框架。 在该框架内将是一个sqlite表中的列表行(取决于表中有多少行)。 对于框架中的每一行,都需要一个tk.Checkbutton,表中的一个值和两个tk.Entry。 这是一张(不好的
1回复

将tkinter输出保存到sqlite3数据库

我对编程还很陌生,我正在尝试将tkinter输入框的输入保存到sqlite数据库中的字段中。 但是,无论如何,我总是将其保存为PY_VAR(number)的变体,或仅打印为{}。 这是代码的相关部分(SQL查询在数据库上下文中均有效)。 我将如何纠正此问题,以便将输入条目保存到SQL数据库
1回复

Tkinter输入未插入数据库(sqlite3)

当我在tkinter上单击Add时,它不会在数据库中添加任何内容,我不知道sqlite3很多。 我的数据库文件: Python档案: 当单击tkinter上的添加按钮时,它给了我空白的输出,这意味着它没有在数据库中插入任何内容