python使用虚拟环境venv

venv模块支持使用自己的站点目录创建轻量级“虚拟环境”,可选择与系统站点目录隔离。每个虚拟环境都有自己的Python二进制文件(与用于创建此环境的二进制文件的版本相匹配),并且可以在其站点目录中拥有自己独立的已安装 Python 软件包集。 3.6 版后已移除: pyvenv 是 Python 3.3 和 3.4 中创建虚拟环境的推荐工具,不过 在 Python 3.6 中已弃用。 在 3.5 版更改: 现在推荐使用 venv 来创建虚拟环境。 创建venv虚拟环境 如果使用python2,则需要安装virtualenv模块 text 1 2 pip install virtualenv python -m virtualenv {name} python3内置了 venv 模块,可以直接使用 text 1 python3 -m venv {name} 进入虚拟环境 linux text 1 venv\Scripts\activate windows text 1 venv\Scripts\activate.bat 退出环境 text 1 2 venv\Scripts\deactivate.bat venv\Scripts\deactivate 使用venv环境安装软件报错 Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host=‘pypi....

 ·  · 

python中的signal

什么是信号 信号(signal)– 进程间通讯的一种方式,也可作为一种软件中断的方法。一个进程一旦接收到信号就会打断原来的程序执行来按照信号进行处理。 简化术语,信号是一个事件,用于中断运行功能的执行。信号始终在主Python线程中执行。对于信号,这里不做详细介绍。 Python封装了操作系统的信号功能的库 singal 的库。singal 库可以使我们在python程序中中实现信号机制。 https://zh.wikipedia.org/wiki/Unix%E4%BF%A1%E5%8F%B7) Python的信号处理 首先需要了解Python为什么要提供 signal Library。信号库使我们能够使用信号处理程序,以便当接收信号时都可以执行自定义任务。 Mission:当接收到信号时执行信号处理方法 可以通过使用 signal.singal() 函数来实现此功能 Python对信号的处理 通常情况下Python 信号处理程序总是会在主 Python 主解析器的主线程中执行,即使信号是在另一个线程中接收的。 这意味着信号不能被用作线程间通信的手段。 你可以改用 threading 模块中的同步原语。 Python信号处理流程,需要对信号处理程序(signal handling )简要说明。signal handling 是一个任务或程序,当检测到特定信号时,处理函数需要两个参数,即信号id signal number (Linux 中 1-64),与堆栈帧 frame。通过相应信号启动对应 signal handling ,signal.signal() 将为信号分配 处理函数。 如:当运行一个脚本时,取消,此时是捕获到一个信号,可以通过捕获信号方式对程序进行异步的优雅处理。通过将信号处理程序注册到应用程序中: py 1 2 3 4 5 6 7 8 9 10 11 import signal import time def handler(a, b): # 定义一个signal handling print("Signal Number:", a, " Frame: ", b) signal....

 ·  · 

P2P打洞技术

P2P 概述 相比于 C/S B/S 架构来说, P2P 是由 Peer 组成。每个Peer同时是客户端也是服务器。这意味着,P2P网络中的peer点为每个其他的peer提供服务,所有节点直接相互通信,没有中心节点,并共享资源源相互联系。 P2P有结构化的P2P网络和非结构化P2P网络。如TomP2P (Java的一个框架,一个分布式哈希表,提供去中心化的键/值基础设施)。而Gnutella (第一个分散式P2P文件共享网络),是非结构化 (unstructured)P2P网络的。另外还有两种类型的P2P网络,即集中式(centralized)P2P网络(Napster)和混合(hybrid p2p)peer网络(如Skype)。 NAT网络 由于NAT的网络模型,破坏了主机 Peer之间的端到端连接,因此P2P网络需要穿过NAT网络,而穿过NAT网络是目前为P2P技术面临的一个很大的挑战。 网络地址转换,NAT (Network Address Translation)是一种模糊指明的机制,可以将两个IP连接在一起,一个NAT设备总是拥有至少两个IP地址,(公网IP,私网IP),NAT就是将数据包上的IP地址在传输时,将私网IP转换为公网IP。每个NAT设备会维护一个NAT表,该表存储了所有活动的连接。 在创建网络映射后,NAT将源IP地址和端口更改为外部源IP地址和端口。NAT保留端口,不将新端口分配给外部源。一旦创建了映射,只要映射存在,与之联系的设备就能够发回消息。不存在NAT映射的所有来自外部的通信请求都是无法穿越NAT。因此,在P2P环境中,如果两个peer位于在NAT之后,两者都无法直接联系,因为它们之间不知道外部IP地址和源端口,NAT表中并没有其所维护的映射信息。所以NAT穿越中的主要问题之一是网络地址转换问题。 NAT网络类型 一般来讲, NAT网络可以分为四种类型: nat type 全锥型(Full Cone) 受限锥型(Restricted Cone), 或者说是IP受限锥型 端口受限锥型(Port Restricted Cone), 或者说是IP + PORT受限锥型 对称型(Symmetric) Full Cone NAT 全锥形 全锥形网络(Full Cone NAT) 的工作原理类似于 IP 地址一对一映射。 内部 IP 和端口映射到相同的外部地址和端口。 之后,任何外部源都可以通过向外部地址发送数据包来访问内部主机。 这意味着,一旦创建了映射,任何外部主机都可以联系内部主机。如下图 地址受限形的锥形NAT Address Restricted Cone NAT 地址受限形锥形 NAT是,仅当内部主机先联系外部主机时,受限锥形 NAT 才会为相应的内部主机分配外部IP。 外部主机然后能够通过分配的外部地址联系内部主机。 对称型 Symmetric nat 对称 NAT 是最难穿过的NAT,因为对称将随机端口分配给映射。 如果外部主机首先与内部主机连接,则外部主机只能知道外部映射。 在 P2P 场景中, 如果两个Peer(主机)位于 NAT 后面,则它们无法互相通信以让另一个对等体知道所使用的映射。 此外,对称 NAT 几乎不可能知道分配的端口以通过打孔(hole Punching)建立连接。...

 ·  · 

awk常用案例

工具命令集合 长期总结 - Linux日志查询命令 长期总结 - Linux网络命令合集 长期总结 - Linux性能分析命令 awk常用案例 bash shell常用示例 探索kubectl - 巧用jsonpath提取有用数据 探索kubectl - kubectl诊断命令集合 ##AWK运算符 运算符 说明 赋值运算符 = += -= *= /= %= ^= **= 逻辑运算符 || 逻辑或 && 逻辑与 正则运算符 ~ !~ 匹配正则表达式和不匹配正则表达式 关系运算符 < <= > >= != == 关系运算符 算术运算符 + - 加,减 *** / &** 乘,除与求余 + - ! 一元加,减和逻辑非 ^ *** 求幂 ++ – 增加或减少,作为前缀或后缀 其他运算符 $ 字段引用 空格 字符串链接符 ?...

 ·  · 

macos python安装mysqlapi集合

记录一下,接了一个python2 django1.x的项目,很老了导致很多扩展无法安装 os version:macos catalina python version: 2.7.18 而django后端使用sqllite以外需要对应客户端引擎,而安装时编译依赖C客户端即实际mysql组件。 使用的数据库后端。 内建的数据库后端有: ‘django.db.backends.postgresql’ ‘django.db.backends.mysql’ ‘django.db.backends.sqlite3’ ‘django.db.backends.oracle’ 并且修改配置实例 text 1 2 3 4 5 6 7 8 9 10 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'USER': 'mydatabaseuser', 'NAME': 'mydatabase', 'TEST': { 'NAME': 'mytestdatabase', }, }, } brew unlink mysql error: command ‘gcc’ failed with exit status 1 text 1 2 3 4 5 6 creating build/temp.macosx-10.9-x86_64-2.7 gcc -fno-strict-aliasing -fno-common -dynamic -arch x86_64 -g -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -Dversion_info=(1,2,5,'final',1) -D__version__=1....

 ·  ·