当前位置: 首页 > news >正文

借助 .pth 文件完成多个 Python 解释器的合并

相关搜索

  • conda 虚拟环境如何使用 ROS 的 Python 模块
  • conda 虚拟环境找不到 catkin_pkg

问题描述

如果你在 Ubuntu 20.04 中装了 conda,那么你的 Ubuntu 会有这些 Python 解释器:

  • /usr/bin/python3:系统的解释器 (版本为 3.8.10,含有 ROS 模块)
  • /opt/miniconda3/bin/python:base 环境的解释器
  • /opt/miniconda3/envs/*/bin/python:虚拟环境的解释器

对于 ROS 玩家而言,只要不使用 conda 就有很多好处:

  1. 不会因为环境变量导致各种奇怪的报错
  2. 只要用系统的 Python 解释器就万事大吉

但同时也有一些坏处:

  1. 不能使用不支持 Python 3.8 的库
  2. 万一把系统的 Python 解释器稿费了,可能就要重装系统了

如果既要用 conda 的虚拟环境 (version ≥ 系统解释器),又要用系统解释器的 ROS 模块,就需要通过 .pth 文件完成多个 Python 解释器的合并

试错:PYTHONPATH

Python 的模块通常是一个包含 .py 文件、二进制文件的文件夹,只要我们的 Python 解释器能找到这个文件夹就能调用对应的模块

如果我们设置了 PYTHONPATH 的值,那么这其中的路径会位于 `sys.path` 的最前方——也就是 Python 解释器在执行 import 时,会优先搜索这个路径下的模块

PYTHONPATH=/opt/ros/noetic/lib/python3/dist-packages

虚拟环境:

(tongzj) root@2c41537759b7:/home/workbench# python

Python 3.9.0 (default, Nov 15 2020, 14:28:56)

[GCC 7.3.0] :: Anaconda, Inc. on linux

Type "help", "copyright", "credits" or "license" for more information.

>>> import catkin_pkg

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

ModuleNotFoundError: No module named 'catkin_pkg'

>>> import sys

>>> sys.path

['', '/opt/ros/noetic/lib/python3/dist-packages', '/opt/miniconda3/envs/tongzj/lib/python39.zip', '/opt/miniconda3/envs/tongzj/lib/python3.9', '/opt/miniconda3/envs/tongzj/lib/python3.9/lib-dynload', '/opt/miniconda3/envs/tongzj/lib/python3.9/site-packages']

尽管如此,我们还是不能找到 catkin_pkg,那么又通过以下步骤对 PYTHONPATH 进行修正

系统解释器:

root@2c41537759b7:/home/workbench# python3
Python 3.8.10 (default, Nov  7 2024, 13:10:47) 
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import catkin_pkg
>>> catkin_pkg.__file__
'/usr/lib/python3/dist-packages/catkin_pkg/__init__.py'

export PYTHONPATH=/opt/ros/noetic/lib/python3/dist-packages:/usr/lib/python3/dist-packages

虚拟环境:

(tongzj) root@2c41537759b7:/home/workbench# python
Python 3.9.0 (default, Nov 15 2020, 14:28:56) 
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.

>>> import catkin_pkg
>>> import sys
>>> sys.path
['', '/opt/ros/noetic/lib/python3/dist-packages', '/usr/lib/python3/dist-packages', '/opt/miniconda3/envs/tongzj/lib/python39.zip', '/opt/miniconda3/envs/tongzj/lib/python3.9', '/opt/miniconda3/envs/tongzj/lib/python3.9/lib-dynload', '/opt/miniconda3/envs/tongzj/lib/python3.9/site-packages'] 

现在可以正常导入模块了,但是如果使用 pip 的话,很容易就发现不对劲:虚拟环境应该使用 /opt/miniconda3/envs/tongzj/bin/pip,但是报错的来源都是 /usr/lib/python3 (也就是系统解释器)

或者说,虚拟环境使用了系统解释器的 pip —— 这是因为系统解释器的 pip 模块位于 /usr/lib/python3/dist-packages

虚拟环境:

(tongzj) root@2c41537759b7:/home/workbench# pip install torch==2.4.1 torchvision==0.19.1 torchaudio==2.4.1 --index-url https://download.pytorch.org/whl/cu121
Traceback (most recent call last):
File "/opt/miniconda3/envs/tongzj/bin/pip", line 7, in <module>
from pip._internal.cli.main import main
File "/usr/lib/python3/dist-packages/pip/_internal/cli/main.py", line 10, in <module>
from pip._internal.cli.autocompletion import autocomplete
File "/usr/lib/python3/dist-packages/pip/_internal/cli/autocompletion.py", line 9, in <module>
from pip._internal.cli.main_parser import create_main_parser
File "/usr/lib/python3/dist-packages/pip/_internal/cli/main_parser.py", line 7, in <module>
from pip._internal.cli import cmdoptions
File "/usr/lib/python3/dist-packages/pip/_internal/cli/cmdoptions.py", line 25, in <module>
from pip._internal.locations import USER_CACHE_DIR, get_src_prefix
File "/usr/lib/python3/dist-packages/pip/_internal/locations.py", line 19, in <module>
from pip._internal.utils import appdirs
File "/usr/lib/python3/dist-packages/pip/_internal/utils/appdirs.py", line 13, in <module>
from pip._vendor import appdirs as _appdirs
ImportError: cannot import name 'appdirs' from 'pip._vendor' (/usr/lib/python3/dist-packages/pip/_vendor/__init__.py)

如果我们可以把 /usr/lib/python3/dist-packages 放在 `sys.path` 的末尾就可以避免这个问题

解决方案

要让虚拟环境的解释器找到系统解释器的 ROS 模块,我们可以使用 .pth 文件来拓展 Python 模块的搜索路径

经过测试,Windows 和 Ubuntu 系统下的虚拟环境,site-packages 文件夹下的所有 .pth 文件都是有效的

虚拟环境:

(tongzj) root@2c41537759b7:/home/workbench# python

Python 3.9.0 (default, Nov 15 2020, 14:28:56)

[GCC 7.3.0] :: Anaconda, Inc. on linux

Type "help", "copyright", "credits" or "license" for more information.

>>> import sys

>>> sys.path

['', '/opt/ros/noetic/lib/python3/dist-packages', '/opt/miniconda3/envs/tongzj/lib/python39.zip', '/opt/miniconda3/envs/tongzj/lib/python3.9', '/opt/miniconda3/envs/tongzj/lib/python3.9/lib-dynload', '/opt/miniconda3/envs/tongzj/lib/python3.9/site-packages']

.pth 文件的格式如下 (可以有多行,每一行都是一个搜索路径):

/usr/lib/python3/dist-packages

而如何定位 site-packages 的位置?site-packages 目录下不仅有我们通过 pip install 安装的包,还有 pip 模块,所以有:

虚拟环境:

(tongzj) root@2c41537759b7:/home/workbench# python
Python 3.9.0 (default, Nov 15 2020, 14:28:56) 
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pip
>>> pip.__file__
'/opt/miniconda3/envs/gsicpslam/lib/python3.9/site-packages/pip/__init__.py'

故我们可以通过以下代码来进行 .pth 文件的读写

from pathlib import Pathimport pipSITE_PACKAGES = Path(pip.__file__).parent.parentclass PythonExtLibs:f = SITE_PACKAGES / "extlib.pth"@classmethoddef load(cls):return set(p for p in cls.f.read_text().splitlines() if p) if cls.f.is_file() else set()@classmethoddef dump(cls, ext):ext = [str(p.absolute()) for p in map(Path, ext) if p.is_dir()]cls.f.write_text("\n".join(ext)) if ext else cls.f.unlink(missing_ok=True)return ext@classmethoddef add(cls, paths):ext = cls.load()return cls.dump(ext | set(map(str, paths)))@classmethoddef remove(cls, paths):ext = cls.load()return cls.dump(ext - set(map(str, paths)))if __name__ == "__main__":print(PythonExtLibs.dump(["/usr/lib/python3/dist-packages"]))

.pth 文件中的路径被成功添加到 `sys.path` 的末尾,解决

虚拟环境:

(tongzj) root@2c41537759b7:/home/workbench# python
Python 3.9.0 (default, Nov 15 2020, 14:28:56) 
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/opt/ros/noetic/lib/python3/dist-packages', '/opt/miniconda3/envs/tongzj/lib/python39.zip', '/opt/miniconda3/envs/tongzj/lib/python3.9', '/opt/miniconda3/envs/tongzj/lib/python3.9/lib-dynload', '/opt/miniconda3/envs/tongzj/lib/python3.9/site-packages', '/usr/lib/python3/dist-packages']

潜在问题的解决

完成以上步骤后,虚拟环境不仅能找到自己的模块,还能找到系统解释器的模块

我们把系统解释器模块的路径添加到了 `sys.path` 的末尾,使得虚拟环境优先使用自己的模块,如果没有的话再使用系统解释器的模块

那么,不难猜测还可能有以下问题:

系统解释器虚拟环境问题
模块 1未发现
模块 2因为 pip 检测到已经安装该模块,无法在缺少该环境的一方进行 install
模块 3
模块 4因为两个环境同时具有一个模块,导致 pip uninstall 无法正确定位需要卸载的部分 (如下所示)

(tongzj) root@2c41537759b7:/home/workbench# pip install -r requirements.txt
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Collecting opencv-contrib-python (from -r requirements.txt (line 1))
......
Attempting uninstall: click
Found existing installation: Click 7.0
Uninstalling Click-7.0:
Successfully uninstalled Click-7.0
Attempting uninstall: blinker
Found existing installation: blinker 1.4
error: uninstall-distutils-installed-package

× Cannot uninstall blinker 1.4
╰─> It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall. 

但这些都是由于 .pth 文件造成的,所以只需把 .pth 暂时屏蔽即可 (修改文件拓展名 / 删除) 

相关文章:

借助 .pth 文件完成多个 Python 解释器的合并

相关搜索 conda 虚拟环境如何使用 ROS 的 Python 模块conda 虚拟环境找不到 catkin_pkg 问题描述 如果你在 Ubuntu 20.04 中装了 conda&#xff0c;那么你的 Ubuntu 会有这些 Python 解释器&#xff1a; /usr/bin/python3&#xff1a;系统的解释器 (版本为 3.8.10&#xff0…...

今天也是记录小程序进展的一天(破晓时8)

嗨嗨嗨朋友们&#xff0c;今天又来记录一下小程序的进展啦&#xff01;真是太激动了&#xff0c;项目又迈出了重要的一步&#xff0c;231啦&#xff01;感觉每一步的努力都在积累&#xff0c;功能逐渐完善&#xff0c;离最终上线的目标越来越近了。大家一直支持着这个项目&…...

python高级加密算法AES对信息进行加密和解密

AES&#xff08;高级加密标准&#xff09;是一种广泛使用的对称加密算法&#xff0c;它以字节为单位处理数据&#xff0c;将明文分组加密成密文。AES算法的核心在于一个轮函数&#xff0c;该函数会对数据执行多次变换&#xff0c;包括字节代换、行移位、列混合和轮密钥加。这些…...

# [Unity]【游戏开发】 脚本生命周期与常见事件方法

在Unity中,脚本的生命周期是指脚本从创建到销毁的整个过程,以及在此过程中触发的各类事件。掌握脚本生命周期对优化游戏开发过程和避免性能问题至关重要。本文将详细探讨脚本生命周期的关键事件、常见的事件方法,并通过实例说明如何在合适的时机执行脚本逻辑,以确保游戏的流…...

《探秘鸿蒙Next:非结构化数据处理与模型轻量化的完美适配》

在鸿蒙Next的人工智能应用场景中&#xff0c;处理非结构化数据并使其适配模型轻量化需求是一项关键且具有挑战性的任务。以下是一些有效的方法和策略。 数据预处理 数据清洗&#xff1a;非结构化数据中往往存在噪声、重复和错误数据。对于文本数据&#xff0c;要去除乱码、特殊…...

Spring Boot框架下的上海特产销售商城网站开发之旅

摘要 本项目基于Spring Boot框架开发&#xff0c;旨在创建一个网络上海特产销售商城网站。在黄菊华老师的指导下&#xff0c;该项目不仅涵盖了核心代码讲解和答辩指导&#xff0c;还提供了详尽的开发文档、开题报告、任务书及PPT等毕业设计辅导材料。黄老师是《Vue.js入门与商城…...

HTML 基础入门:核心标签全解析

在网页开发的世界里&#xff0c;HTML&#xff08;超文本标记语言&#xff09;是基石般的存在。它负责构建网页的基本结构&#xff0c;为用户呈现出丰富多样的内容。今天&#xff0c;就让我们一起深入了解 HTML 中几个极为关键的基础标签&#xff0c;开启网页创作的第一步。 一…...

Docker基础安装与使用

Docker 简介 Docker 是一个开源的容器化平台&#xff0c;用于开发、部署和运行应用程序。它通过将应用程序及其依赖项打包到一个轻量级的、可移植的容器中&#xff0c;实现了应用程序的快速部署和跨环境一致性。 Docker 的核心概念 容器&#xff08;Container&#xff09;&a…...

基于Docker的Spark分布式集群

目录 1. 说明 2. 服务器规划 3. 步骤 3.1 要点 3.2 配置文件 3.2 访问Spark Master 4. 使用测试 5. 参考 1. 说明 以docker容器方式实现apache spark计算集群&#xff0c;能灵活的增减配置与worker数目。 2. 服务器规划 服务器 (1master, 3workers) ip开放端口备注ce…...

物业管理软件引领智能社区高效服务与管理创新

内容概要 物业管理软件是在智能社区建设中不可或缺的重要工具。随着城市化进程的加速&#xff0c;社区管理的复杂性也在不断上升&#xff0c;如何提高服务效率和管理水平&#xff0c;已经成为物业公司面临的主要挑战。在这样的背景下&#xff0c;物业管理软件以其强大的功能和…...

NoETL | 数据虚拟化如何在数据不移动的情况下实现媲美物理移动的实时交付?

在我们之前的文章中&#xff0c;我们回顾了Denodo在逻辑数据仓库和逻辑数据湖场景中所使用的主要优化技术&#xff08;具体内容请参阅之前的文章&#xff09;。 数据架构 | 逻辑数据仓库与物理数据仓库性能对比_物理数仓、逻辑数仓-CSDN博客文章浏览阅读1.5k次&#xff0c;点赞…...

ovs实现lb负载均衡

负载均衡定义 负载均衡器的实现原理是通过硬件或软件设备将客户端访问流量根据转发策略分发到多个服务器或设备上&#xff0c;以确保系统的负载均衡。常见的实现方式包括&#xff1a; 二层负载均衡‌&#xff1a;使用虚拟MAC地址方式&#xff0c;根据OSI模型的二层进行负载均…...

2025 OWASP十大智能合约漏洞

随着去中心化金融&#xff08;DeFi&#xff09;和区块链技术的不断发展&#xff0c;智能合约安全的重要性愈发凸显。在此背景下&#xff0c;开放网络应用安全项目&#xff08;OWASP&#xff09;发布了备受期待的《2025年智能合约十大漏洞》报告。 这份最新报告反映了不断演变的…...

在亚马逊云科技上用AI提示词优化功能写出漂亮提示词(下)

提示工程&#xff08;Prompt Engineering&#xff09;对各位小伙伴们来说是再熟悉不过了&#xff0c;提示词工程技术是通过编写指令词&#xff0c;指导开发者们调用AI基础模型&#xff08;FMs&#xff09;获得期望的响应。但是经常写提示词的朋友们会知道&#xff0c;为了获取理…...

智能鞋利用机器学习和深度学习技术进行患者监测和步态分析的演变与挑战

概述 近年来&#xff0c;创新型 "智能鞋 "层出不穷&#xff0c;将物联网&#xff08;IoT&#xff09;和可穿戴设备技术融入 "鞋 "中&#xff0c;成为我们日常生活中不可或缺的一部分。智能鞋可以通过鞋中嵌入的电子元件、传感器、微处理器和其他技术&…...

Unity编辑拓展显示自定义类型

配合自定义特性或着header可以添加注解 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; using System.Reflection; using System; using Unity.VisualScripting;#if UNITY_EDITORpublic class EditorRender {public sta…...

Unity预制体未即时刷新

有时候在用代码修改预制体某个组件中的属性时&#xff0c;可能原本预制体未及时刷新&#xff1a; 可以使用PrefabUtility.SavePrefabAsset(gameobject)等函数&#xff0c;使得使用代码修改之后马上刷新生效。 一、AssetDatabase.Refresh() 功能&#xff1a; AssetDatabase.Re…...

SSO VS OAuth2区别

目录 理解认证与授权 Single Sign On(SSO) ​编辑 OAuth2 OAuth2协议理解 Access Token的秘密 SSO与OAuth2的关系 理解认证与授权 Single Sign On(SSO) 示例图 1、用户通过浏览器访问系统 Protected APP&#xff08;Goto app&#xff09; 2、Protected APP 发现没有登录…...

12_PlayerPrefs存储登录窗口逻辑_回调函数优化Lamd表达式

创建 登录窗口LoginWnd.cs 绑定 登录窗口LoginWnd.cs 编写 登录窗口LoginWnd.cs using UnityEngine; using UnityEngine.UI; //输入文本 命名空间 //功能 : 登录注册窗口 public class LoginWnd : MonoBehaviour{public InputField iptAcct;public InputField iptPass;public …...

蒙操作系统(HarmonyOS)

鸿蒙操作系统&#xff08;HarmonyOS&#xff09;是由华为技术有限公司开发的面向未来、面向全场景的分布式操作系统。它旨在为各种不同类型的设备提供统一的操作系统和无缝的智能体验&#xff0c;从智能手机到可穿戴设备&#xff0c;再到智能家居产品等。在鸿蒙的应用生态中&am…...

PHP同城配送小程序

&#x1f680; 同城极速达——您生活中的极速配送大师 &#x1f4f1; 一款专为现代都市快节奏生活量身打造的同城配送小程序&#xff0c;同城极速达&#xff0c;集高效、便捷、智能于一身&#xff0c;依托ThinkPHPGatewayWorkerUniapp的强大架构&#xff0c;巧妙融合用户端、骑…...

C#语言的学习路线

C#语言的学习路线 C#作为一种现代编程语言&#xff0c;凭借其简洁的语法、强大的功能和广泛的应用&#xff0c;得到了越来越多开发者的青睐。无论是开发桌面应用、Web应用、游戏&#xff0c;还是云服务&#xff0c;C#都有着广泛的应用场景。本文将为有志于学习C#的读者提供一条…...

js手写-实现Promise的then方法

简单引入then 代码 const PROMISE_STATUS_PENDING "pending";const PROMISE_STATUS_FULFILLED "fulfilled";const PROMISE_STATUS_REJECTED "rejected";class MyPromise {constructor(executor) {//status -- 存储promise的状态this.status…...

分布式系统通信解决方案:Netty Marshalling 全面解析

分布式系统通信解决方案&#xff1a;Netty Marshalling 全面解析 一、引言 在现代网络编程中&#xff0c;Netty 作为一款高性能、异步事件驱动的网络应用框架&#xff0c;因其强大的功能和灵活的扩展性&#xff0c;备受开发者青睐。Netty 广泛应用于分布式系统、RPC 框架以及…...

如何轻松实现域名指向服务器

在互联网时代&#xff0c;域名指向服务器是网站上线的关键步骤。域名是用户访问网站的入口&#xff0c;而服务器则是存储网站数据的地方。将域名正确指向服务器&#xff0c;能让用户顺利访问网站内容。虽然这个过程对新手来说可能有些陌生&#xff0c;但只要掌握正确的方法&…...

Java Web开发高级——单元测试与集成测试

测试是软件开发的重要环节&#xff0c;确保代码质量和功能的正确性。在Spring Boot项目中&#xff0c;单元测试和集成测试是常用的两种测试类型&#xff1a; 单元测试&#xff1a;测试单个模块&#xff08;如类或方法&#xff09;是否按预期工作。集成测试&#xff1a;测试多个…...

第九篇: 3.10. 【watchEffect】实现监听,立即执行函数

官网&#xff1a;立即运行一个函数&#xff0c;同时响应式地追踪其依赖&#xff0c;并在依赖更改时重新执行该函数。 watch对比watchEffect 都能监听响应式数据的变化&#xff0c;不同的是监听数据变化的方式不同 watch&#xff1a;要明确指出监视的数据 watchEffect&#x…...

【C++】模板(进阶)

本篇我们来介绍更多关于C模板的知识。模板初阶移步至&#xff1a;【C】模板&#xff08;初阶&#xff09; 1.非类型模板参数 1.1 非类型模板参数介绍 模板参数可以是类型形参&#xff0c;也可以是非类型形参。类型形参就是我们目前接触到的一些模板参数。 //类型模板参数 …...

有了TiDB,是否还需要“散装”大数据组件?

有了TiDB&#xff0c;是否还需要“散装”大数据组件&#xff1f; 最近和同事们讨论一个问题&#xff1a;在大数据应用日益增多的今天&#xff0c;如果使用了TiDB这样的一体化数据库&#xff0c;还需要使用那些传统的大数据组件&#xff08;比如Hadoop、Spark等&#xff09;吗&…...

OSCP - Proving Grounds - BullyBox

主要知识点 如果发现有域名&#xff0c;则可以加入/etc/hosts后重新执行nmap,nikto等扫描dirsearch的时候可以使用完整一些的字典文件&#xff0c;避免漏掉信息.git dump 具体步骤 执行nmap 扫描&#xff0c;发现 80和22端口开放,访问后发现被重定向到 bullybox.local Star…...

升级《在线写python》小程序的分享功能。昨天忘了...

小程序是使用uniapp写的&#xff0c;忘了开启分享功能&#xff0c;导致它现在是这样的。 挺不方便的&#xff0c;所以需要开启分享权限&#xff0c; 由于我这个没有其他需要隐藏的私密页面&#xff0c;所以事直接全局开启就行 在App.vue文件里的onShow里开启即可。加入如下代…...

Spingboot整合Netty,简单示例

Netty介绍在文章末尾 Netty介绍 项目背景 传统socket通信&#xff0c;有需要自身管理整个状态&#xff0c;业务繁杂等问题。 pom.xml <dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId><version>4.1.117.F…...

逆波兰表达式求值(力扣150)

这道题也是一道经典的栈应用题。为什么这样说呢&#xff1f;我们可以发现&#xff0c;当我们遍历到运算符号的时候&#xff0c;我们就需要操控这个运算符之前的两个相邻的数。这里相邻数不仅仅指最初数组里相邻的数&#xff0c;在进行了运算之后&#xff0c;得到的结果与后面的…...

Linux面试题

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…...

如何判断以太坊地址类型?

如何判断以太坊地址类型&#xff1f; 一、账户类型解释 2.1 以太坊外部账户&#xff08;Externally Owned Account&#xff0c;EOA&#xff09; 外部账户&#xff08;EOA&#xff09;是由私钥控制的账户&#xff0c;在以太坊网络中用来发送交易和执行其他操作。EOA 不是智能…...

有限元分析学习——Anasys Workbanch第一阶段笔记(14)静定与超静定问题、约束类型介绍、简支梁挠度求解和自定义材料库建立

目录 0 序言 1 静定与超静定问题 2 Workbranch中Supports介绍 3 简支梁挠度的有限元求解 4 自定义材料库建立 0 序言 静定与超静定问题、约束类型介绍、简支梁挠度求解和自定义材料库建立(内容对应视频22到24课)。 1 静定与超静定问题 在有限元分析中&#xff0c;不同的…...

为医院量身定制做“旧改”| 全视通物联网智慧病房

随着经济工作会议、卫生健康工作会议、“经济高质量发展成效”系列新闻发布会的依次召开&#xff0c;强基工程、三明医改、儿科和精神卫生服务年、中医药传承创新发展、促进生育、养老服务改革、病房改造提升行动...等关键词正成为新的热点&#xff0c;2025年卫生健康工作面临一…...

Java面试专题——面向对象

面向过程和面向对象的区别 面向过程&#xff1a;当事件比较简单的时候&#xff0c;利用面向过程&#xff0c;注重的是事件的具体的步骤/过程&#xff0c;注重的是过程中的具体的行为&#xff0c;以函数为最小单位&#xff0c;考虑怎么做。 面向对象&#xff1a;注重找“参与者…...

PHP异步非阻塞MySQL客户端连接池

文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons&#xff1a;JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram&#xff0c;自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 &#xff1f; 5 IDEA必装的插件&…...

【Linux 源码】内核态到用户态

文章目录 1. 由来2. 流程图3. 中断3.1 概念3.2 8259A芯片3.4 中断时的栈处理3.4.1 相同特权级3.4.2 不同特权级 3.5 中断流程3.6 定位中断程序3.7 中断流程步骤总结 4. 源码4.1 move_to_user_mode4.2 0号进程4.3 TSS和LDT在GDT表排布4.4 ldt中的0x17栈段 5. 总结 1. 由来 ​ 首…...

goland map学习-实践使用练习:判断存在及遍历

对于数据&#xff1a; type Person struct {Address stringAge intJob stringName string }type People map[string]Personvar per People{"1": Person{Address: "1",Age: 1,Job: "1",Name: "1",},"2&quo…...

【威联通】FTP服务提示:服务器回应不可路由的地址。被动模式失败。

FTP服务器提示&#xff1a;服务器回应不可路由的地址。被动模式失败。 问题原因网络结构安全管理配置服务器配置网关![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/1500d9c0801247ec8c89db7a44907e4f.png) 问题 FTP服务器提示&#xff1a;服务器回应不可路由的地址…...

两份PDF文档,如何比对差异,快速定位不同之处?

PDF文档比对是通过专门的工具或软件&#xff0c;自动检测两个PDF文件之间的差异&#xff0c;并以可视化的方式展示出来。这些差异可能包括文本内容的修改、图像的变化、表格数据的调整、格式的改变等。比对工具通常会标记出新增、删除或修改的部分&#xff0c;帮助用户快速定位…...

Vue.js 组件之间的通信模式

Vue.js 组件之间的通信模式 组件之间的通信模式 在 Vue.js 中&#xff0c;组件之间的通信是构建复杂应用的关键。根据组件之间的关系和需求&#xff0c;Vue 提供了多种通信方式。本文介绍了常见的通信模式及其详细示例。 一、父子组件通信 1. 父组件向子组件传递数据&#…...

【Linux 重装】Ubuntu 启动盘 U盘无法被识别,如何处理?

背景 U盘烧录了 Ubuntu 系统作为启动盘&#xff0c;再次插入电脑后无法被识别 解决方案&#xff08;Mac 适用&#xff09; &#xff08;1&#xff09;查找 USB&#xff0c;&#xff08;2&#xff09;格式化&#xff08;1&#xff09;在 terminal 中通过 diskutil list 查看是…...

.Net Core微服务入门全纪录(四)——Ocelot-API网关(上)

系列文章目录 1、.Net Core微服务入门系列&#xff08;一&#xff09;——项目搭建 2、.Net Core微服务入门全纪录&#xff08;二&#xff09;——Consul-服务注册与发现&#xff08;上&#xff09; 3、.Net Core微服务入门全纪录&#xff08;三&#xff09;——Consul-服务注…...

pyautogui自动化鼠标键盘操作

pyautogui&#xff0c;用来写自动化脚本&#xff0c;比按键精灵更方便。pyautogui.position()可以获取当前鼠标位置。pyautogui不支持中文输入&#xff0c;利用 pyperclip从剪切板粘贴输入。 # -*- coding: utf-8 -*- import time import os import traceback import logging …...

2024年AI大模型技术年度总结与应用实战:创新与突破并进

前言 回顾2024年&#xff0c;我一共发布了286篇博文&#xff0c;粉丝数也达到了43000多。这一年里&#xff0c;我收获颇丰&#xff0c;始终坚持AI大模型的研究方向&#xff0c;并且积极开展大模型的实战应用&#xff0c;也取得了一系列令人振奋的突破。 在286篇博文中&#…...

HTML中相对路径和绝对路径详解

文章目录 HTML中相对路径和绝对路径详解一、引言二、绝对路径1、定义2、使用场景3、代码示例 三、相对路径1、定义2、使用方法3、代码示例 四、使用示例1、图片路径2、CSS和JavaScript文件路径3、页面内部链接 五、总结 HTML中相对路径和绝对路径详解 一、引言 在HTML开发中&a…...

联通用户管理系统(一)

#联通用户管理系统&#xff08;一&#xff09; 1.新建项目 如果你是windows的话&#xff0c;界面应该是如下的&#xff1a; 2.创建app python manage.py startapp app01一般情况下&#xff1a;我们是在pycharm的终端中运行上述指令&#xff0c;但是pychrm中为我们提供了工具…...