我正在运行LinuxMint20.3肉桂,我有一些虚拟环境(使用标准库venv模块)是从system (没有其他Python安装)创建的,即3.8.10版本。我知道系统Python是在没有TKinter支持的情况下配置的:
>>> 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代码:
$ apt list tcl
Listing... Done
tcl/focal,now 8.6.9+1 amd64 [installed]
tcl/focal 8.6.9+1 i386是否可以将我的系统配置为
tkinter标准库包)从一些标准源获得到该代码;但是如果是这样的话,是怎么做的?
python3-tk到底打算安装什么呢?
发布于 2023-03-06 23:24:59
唯一可以做到的方法是依赖于包维护人员(例如:如果他们也使其在pip上可用,而不是单独安装Python )。virtualenv和pip携手并进。
Symlinking也能工作,而不是复制库(和相关文件),就像在这上看到的,所以请回答。
最后,您当然可以从源代码编译Python,并让它在特定的目录中工作,而不是全局安装它(例如:就像virtualenv那样),但是如果做错了,它可能会破坏一些现有的(Python)应用程序(例如:这是像自制/linuxbrew这样的项目所做的)。
一个很好的现有解决方案是碧昂夫。请注意,它仍将从源代码编译,但将在单个目录(指定的目录或$HOME中的点目录中)进行编译。它不会替代virtualenv,但它将阻止系统的文件被编辑(因为它不会在全局/系统范围内复制已编译的二进制文件)。
https://unix.stackexchange.com/questions/738583
复制相似问题