Python import 出错的解决方案
在多文件的Python程序编写中,使用 import 引用其他文件中的代码经常会出错。尤其是在涉及到包时,要达到目标往往需要反复调整,通过不断尝试来得到正确的结果。下面针对 Python 中的 import 机制进行一些探索。
在多文件的Python程序编写中,使用 import 引用其他文件中的代码经常会出错。尤其是在涉及到包时,要达到目标往往需要反复调整,通过不断尝试来得到正确的结果。下面针对 Python 中的 import 机制进行一些探索。
为了从源代码构建一个全新的Linux系统,不可避免地涉及到大量的编译工作。而这里的编译,又不仅仅是“编译”,还隐含了“链接”等步骤。如果不仔细设计编译的过程,就容易在这个过程中发生链接错误,导致最终的产物无法正常工作。同时,gcc与glibc又涉及到相互依赖的“循环依赖”问题。
在这里,我们对交叉编译等概念进行介绍,并结合这些概念对LFS编译的思路进行分析。
在 Hyper-V 中根据 LFS11.3 从源码构建 Linux 系统。
Graphviz是一个开源的图可视化工具。它可将DOT语言描述的图结构渲染为SVG、PNG、PDF等图像。在图结构可视化分析、系统结构图可视化多个场景都可用。DOT语言作为文本形式表示的语言,可以轻松地纳入Git中进行版本管理。
Graphviz的使用上,既可以通过安装Graphviz软件进行本地渲染,也可以通过部分网站在线渲染。部分网站还能生成具有特定风格的图像。
下图展示了一个通过在线生成的Sketchy风格图结构。
最近实验室的服务器存储容量不够了,准备添加硬盘来进行扩容。服务器使用了 LVM 来存储 /home
目录的内容,而之前对 LVM 的了解较少,因此对 LVM 进行了一些了解。并通过虚拟机来模拟了硬盘的添加,实验了硬盘添加后进行扩容的操作。相关内容记录于此形成本文。
LVM 是一种可用在 Linux 内核的逻辑分卷管理器;可用于管理磁盘驱动器或其他类似的大容量存储设备。
LVM 利用 Linux 内核的
device-mapper
功能来实现存储系统的虚拟化(系统分区独立于底层硬件)。通过LVM,你可以实现存储空间的抽象化并在上面建立虚拟分区(virtual partitions),可以更简便地扩大和缩小分区,可以增删分区时无需担心某个硬盘上没有足够的连续空间,避免为正在使用的磁盘重新分区的麻烦、为调整分区而不得不移动其他分区的不便。
简单地说, LVM 可以将多个磁盘或磁盘分区组成一个逻辑硬盘(VG, Volume Group, 卷组),可以在这个逻辑硬盘上创建可动态调整的分区(LV, Logical Volume, 逻辑卷)。
通过这一层模拟,对存储的管理变得更加灵活。实现了 VG、LV的在线修改;无需考虑分区在硬盘上的位置,也不要求空间连续。提供了数据在硬盘间的迁移功能。此外,LVM还提供了诸如快照、镜像、缓存等功能。
而 LVM 的缺点在于需要额外的设置,且不支持在 Windows 系统下直接访问。另外,与使用 RAID 0 相似地,当一个磁盘损坏时会影响到整个卷组。
下面将简单地介绍 LVM 的基本组成,并对 LVM 的创建和动态扩容进行实验。
进行深度学习实验时,经常需要使用 GPU
服务器。在不同的实验中,对 CUDA
版本等要求各不相同。为了解决这一问题,可以通过 Docker
技术从而实现多套环境随意使用。但让所有用户都能够深入理解 Docker
可能较为困难,因此需要寻求其他方案。直觉的解决方法便是利用虚拟化技术给每位同学提供一个虚拟机。但鉴于虚拟化技术的性能损耗和 GPU
共用方面的困难,因此不太现实。
而 LXD
这一系统容器方案恰好可以实现这一目标。它基于容器技术,开销小,支持 GPU
共享,因此极为适合这一场景。通过这一技术还带来了一些额外的优势,如:用户所有操作均在容器中进行,避免了对宿主机系统的破坏;提供快照功能,可以在误操作导致容器损坏时恢复。
下面对搭建过程整理后汇总如下,作为记录。宿主系统为从 Ubuntu 14.04 LTS
持续升级达到的 Ubuntu 20.04 LTS
,中间经过大量安装软件等操作。若在全新安装的系统上出现无法定位包等情况,需要逐个解决。搭建过程中的踩坑过程略过,其中的操作可能有前后相关性,不能单独查看某一部分而直接进行复现。
近期对博客进行了重新整理。优化了提交记录,使得Git提交历史更加清晰。现将过程记录如下,以备后续查看。
OpenWrt是一个常用的路由器操作系统,基于Linux可以实现丰富的功能。将其配置为软路由虚拟机,可以让宿主机及其他虚拟机通过OpenWrt虚拟机上网。完成后,可以利用x86软路由的强大性能部署透明代理等各种功能。