首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我是否可以在虚拟环境中使用Tkinter,而不将它包含在系统Python中?

我是否可以在虚拟环境中使用Tkinter,而不将它包含在系统Python中?
EN

Unix & Linux用户
提问于 2023-03-03 21:31:46
回答 1查看 380关注 0票数 1

我正在运行LinuxMint20.3肉桂,我有一些虚拟环境(使用标准库venv模块)是从system (没有其他Python安装)创建的,即3.8.10版本。我知道系统Python是在没有TKinter支持的情况下配置的:

代码语言:javascript
复制
>>> import _tkinter
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named '_tkinter'
>>> import tkinter
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'tkinter'
>>> import turtle
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.8/turtle.py", line 107, in <module>
    import tkinter as TK
ModuleNotFoundError: No module named 'tkinter'

奇怪的是,turtle模块是存在的(并且由于缺少tkinter而无法导入),尽管tkinter不存在(也可能因为_tkinter丢失而无法导入)。

我知道,通过安装TKinter系统包,我应该能够使python3-tk在全球范围内可用;并且我知道TKinter依赖于需要安装的非Python代码(而不是按每个人的方式安装)。

但是,据我了解,安装python3-tk以及安装相关的TCL/Tk代码时,将更新system以包含tkinter标准库包。原则上,我想避免这样做。我推断,这个包的缺失是薄荷团队的一个深思熟虑的选择(特别是考虑到它在肉桂中甚至没有)具有积极的安全影响(流氓Python脚本将无法利用未来发现的假想的Tcl/Tk漏洞,除非是在用户级别的venv中)。

无论如何,我的系统似乎已经安装了TCL代码:

代码语言:javascript
复制
$ apt list tcl
Listing... Done
tcl/focal,now 8.6.9+1 amd64 [installed]
tcl/focal 8.6.9+1 i386

是否可以将我的系统配置为

  • 核心TCL/Tk代码可以在Python虚拟环境中使用;
  • 我创建的每一个新的virtualenv都可以将Python (即tkinter标准库包)从一些标准源获得到该代码;但是
  • 系统Python没有被修改(并且没有按设计来运行Tkinter代码)?

如果是这样的话,是怎么做的?

python3-tk到底打算安装什么呢?

EN

回答 1

Unix & Linux用户

发布于 2023-03-06 23:24:59

唯一可以做到的方法是依赖于包维护人员(例如:如果他们也使其在pip上可用,而不是单独安装Python )。virtualenvpip携手并进。

Symlinking也能工作,而不是复制库(和相关文件),就像在上看到的,所以请回答。

最后,您当然可以从源代码编译Python,并让它在特定的目录中工作,而不是全局安装它(例如:就像virtualenv那样),但是如果做错了,它可能会破坏一些现有的(Python)应用程序(例如:这是像自制/linuxbrew这样的项目所做的)。

一个很好的现有解决方案是碧昂夫。请注意,它仍将从源代码编译,但将在单个目录(指定的目录或$HOME中的点目录中)进行编译。它不会替代virtualenv,但它将阻止系统的文件被编辑(因为它不会在全局/系统范围内复制已编译的二进制文件)。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/738583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档