写过 Python 程序的小伙伴们都知道,需要 import 个非 Python 自带的软件包时,都要用到 pip 这个程序。平时我们都是用 pip,如果我们写好了一个程序,想让大家都能用的到,那么是不是也可以通过 pip 发布出去呢?
想要对现有的 python 进行升级,其本质上也是先从 pypi 上下载最新版本的包,再对其进行安装。所以升级也是使用 pip install,只不过要加一个参数 --upgrade。
1、模块、包 **模块 module:**一般情况下,是一个以.py为后缀的文件。其他可作为module的文件类型还有”.pyo”、”.pyc”、”.pyd”、”.so”、”.dll”,但Python初学者几乎用不到。 module 可看作一个工具类,可共用或者隐藏代码细节,将相关代码放置在一个module以便让代码更好用、易懂,让coder重点放在高层逻辑上。 module能定义函数、类、变量,也能包含可执行的代码。module来源有3种: ①Python内置的模块(标准库); ②第三方模块; ③自定义模块。
出现这个问题是因为:虽然已经把Python升级到了2.7版本,但是pip仍然是原来的版本,仍在原来python的site-package里面
easy_install 这应该是最古老的包安装方式了,目前基本没有人使用了。下面是 easy_install 的一些安装示例
工程模块化是指将具有一定共性的功能封装成一个模块,并对外暴露应用接口,方便其他工程直接调用而无需关注底层实现的思想,工程模块化可以避免工程中各种功能函数相互交杂、定义混乱不堪的情形,有助于提高系统可维护性。
python模块 就是python的程序模块 顶层文件 模块文件1 模块文件2 可以将代码量较大的程序分割成多个有组织的、彼此独立但又能互相交互的代码片段,这些自我包含的有组织的代码段就是模块。模块在物理形式上表现为以.py结尾的代码文件。一个文件被看作一个独立的模块,一个模块也可以被看作是一个文件。模块的文件名就是模块的名字加上扩展名.py。每个模块都有自己的名称空间。 python允许“导入”其它模块以实现代码重用,从而也实现了将独立的代码文件组织成更大的程序系统。python中,模块也是对象;在一个模块顶层定义的所有变量都在被导入时成为了被导入模块的属性。 python的程序架构 一个python程序通常包括一个顶层程序文件和其它的模块文件(0个、1个或多个) 顶层文件:包含了程序的主要控制流程 模块文件:为顶层文件或其它模块提供各种功能性组件。模块首次导入(或重载)时,python会立即执行模块文件的顶层程序代码(不在函数内的代码),而位于函数主体内的代码直到函数被调用后才会执行。python也自带了很多模块,可以使用help(module)查看,这些被称为python标准库文件。 模块的执行环境 模块是被导入的(import),但模块也可以导入和使用其它模块,这些模块可以用python或其它编程语言写成。 模块可内含变量、函数以及类来进行其工作,而函数和类可以包含变量和其它元素。 建议:在顶层文件可以出现大量的控制流语句,而其它的被调用文件仅包含变量、函数及类,这样程序在执行时效率才会高。 python导入模块 在导入模块时只能使用模块名,而不能使用带.py后缀的模块文件名 import语句:导入指定的整个模块,包括生成一个以模块名命名的名称空间 import module1[, module2[, ... moduleN ]] 建议一个import语句只导入一个模块 import module as module_alias from-import语句: 常用于只导入指定模拟的部分属性至当前名称空间。 from module import name1[, name2[, ... nameN ]] 例:from random import choice,randint,random 建议:在顶层文件可以出现大量的控制流语句,而其它的被调用文件仅包含变量、函数及类,这样程序在执行时效率才会高。 import 和 from - import是赋值语句 import和from 是可执行语句,类似于def,因此,它们可以嵌套在if测试中,出现于def中等等 python执行到这些语句时才会对其进行解析,这意味着,所有来自模块的属性仅在import语句执行后才能使用。 import 和from 都是隐性赋值语句 import 将整个模块对象赋值给一个变量名;from将一个或多个变量名赋值给导入此模块的模块中的同名对象 模块就是名称空间:模块的名称空间可以通过属性__dict__或dir(M)获取;模块属性可通过点号(.)运算符获取,格式为M.attr;模块是一个独立的作用域(本地变量就是全局变量) import的工作机制 import语句导入指定的模块时会执行三个步骤: (1) 找到模块文件:在指定的路径下搜索模块文件 (2) 编译成字节码:文件导入时就会编译,因此顶层文件的.pyc字节码文件在内部使用后会被丢弃,只有被导入的文件才会留下.pyc文件。 (3) 执行模块的代码来创建其所有定义的对象:模块文件中的所有语句会依次执行,从头至尾,而此步骤中任何对变量名的赋值运算,都会产生所得到的模块文件的属性。 注意:模块只在第一次导入时才会执行如上步骤。后续的导入操作只不过是提取内存中已加载的模块对象。reload可用于重新加载模块。 模块搜索: python解释器在import模块时必须先找到对应的模块文件 程序的主目录;PYTHONPATH目录(如果设置了些变量);标准链接库目录;任何.pth文件的内容(如果存在.pth文件) 这四个组件组合起来即为sys.path所包含的路径,而python会选择"在搜索路径中的第一个符合导入文件名"的文件。 import sys sys.path 返回一个路径列表,该路径列表是python解释器需要搜索的路径顺序列表
想要在苹果部署软件,如果不使用Munki的话,那就要Apple Remote Desktop来部署,软件的格式也必须是PKG的。 事实上,MDM也是只能用PKG的方式部署。
首先需要安装 pyinstaller 库。 pip install pyinstaller 就可以了。
案例需求 使用shell脚本安装Python环境 应用场景 服务器业务初始化 解决问题 避免人工多次安装,节省人工成本 避免人工错误,提高工作效率 脚本思路 1、获得软件包 2、源码安装 3、升级pip命令 案例代码 #!/bin/bash #Description: python install from zutuanxue(http://www.zutuanxue.com) #Release: python 3.7.6 #Auther: zutuanxue #Email: #OS: Centos
使用C编写Python扩展包。官网文档其实已经很详尽~ 使用场景猜想:某些需要高效处理的算法、某些耗时的操作优化、或者某些核心算法加密等~
所有的 Python 开发者都清楚,Python 之所以如此受欢迎,能够在众多高级语言中,脱颖而出,除了语法简单,上手容易之外,更多还要归功于 Python 生态的完备,有数以万计的 Python 爱好者愿意以 Python 为基础封装出各种有利于开发的第三方工具包。
想用redis-py-cluster连接redis cluter,查看文档发现只支持python2.7和3的版本,而系统自带的是2.6的版本,需要对系统python版本进行升级。
1. 模块 一个模块就是一个包含python代码的文件,后缀名称是.py就可以,模块就是个python文件 为什么我们用模块 程序太大,编写维护非常不方便,需要拆分 模块可以增加代码重复利用的方法 当作命名空间使用,避免命名冲突 如何定义模块 模块就是一个普通文件,所以任何代码可以直接书写 不过根据模块的规范,最好在本块中编写以下内容 函数(单一功能) 类(相似功能的组合,或者类似业务模块) 测试代码 如何使用模块 模块直接导入 模块名称直接以数字开头,需要借助importlib帮助 语法 impo
参考自:http://wiki.ros.org/rospy_tutorials/Tutorials/Makefile
Android是一个单用户图形化系统,功能主要以应用的形式呈现给用户,因此在系统上我们无法直接获取终端,更是无法直接调用系统自带的丰富指令。使用ADB是一个曲线救国的方法,打开USB调试后开发者可以在桌面系统的终端中触发Android系统自带指令,使用方法大概如下:
Traceback (most recent call last): File "/home/himalayas/fdsearch/fdsearch/bin/fdsearch", line 34, in <module> from fdsearch import wsgi File "/home/himalayas/fdsearch/fdsearch/wsgi.py", line 32, in <module> import fdsearch.domain File "/home/himalayas/fdsearch/fdsearch/domain/__init__.py", line 20, in <module> from notify_handler import NotifyHandler File "/home/himalayas/fdsearch/fdsearch/domain/notify_handler.py", line 23, in <module> from cjson import encode as json_encode File "build/bdist.linux-x86_64/egg/cjson.py", line 7, in <module> File "build/bdist.linux-x86_64/egg/cjson.py", line 4, in __bootstrap__ File "/home/himalayas/virtualenv/python2.7-fd/lib/python2.7/site-packages/pkg_resources.py", line 945, in resource_filename self, resource_name File "/home/himalayas/virtualenv/python2.7-fd/lib/python2.7/site-packages/pkg_resources.py", line 1633, in get_resource_filename self._extract_resource(manager, self._eager_to_zip(name)) File "/home/himalayas/virtualenv/python2.7-fd/lib/python2.7/site-packages/pkg_resources.py", line 1661, in _extract_resource self.egg_name, self._parts(zip_path) File "/home/himalayas/virtualenv/python2.7-fd/lib/python2.7/site-packages/pkg_resources.py", line 1025, in get_cache_path self.extraction_error() File "/home/himalayas/virtualenv/python2.7-fd/lib/python2.7/site-packages/pkg_resources.py", line 991, in extraction_error raise err pkg_resources.ExtractionError: Can't extract file(s) to egg cache The following error occurred while trying to extract file(s) to the Python egg cache: [Errno 13] Permission denied: '/root/.python-eggs' The Python egg cache directory is currently set to: /root/.python-eggs
可以将代码量较大的程序分割成多个有组织的、彼此独立但又能互相交互的代码片段,这些自我包含的有组织的代码段就是模块
2.温馨提示:Press RETURN to continue or any other key to abort:按回车继续或其他键中止
supervisor的错误日志如下: Traceback (most recent call last): File "/home/himalayas/owengine/owprice/server.py", line 10, in <module> import action File "/home/himalayas/owengine/owprice/action/__init__.py", line 2, in <module> from owprice import owP
安装地址: https://pypi.python.org/pypi/setuptools#id9
在我很小的时候,曾听闻路边的喇叭说,破了烂了不用的手机不要丢,也不要拿给小孩玩,都可以换不锈钢脸盆,统统可以换不锈钢脸盆,我蠢蠢欲动地拿起大哥大试了下,嗯,真的可以换不锈钢脸盆的,中国人不骗中国人。随着社会的发展,技术的更新迭代,人们现在用的手机功能越来越丰富,我开始犹豫了,还换不换脸盆呢?最终我找到了一种和过去的手机和解的办法,我不换了,我准备结合termux这个软件把它打造成一款迷你型服务器,
Termux是一个Android终端模拟器和Linux环境应用程序,可以直接使用,无需root或设置。自动安装最小基本系统 - 使用APT包管理器可以使用其他软件包。
Python 相对导入与绝对导入,这两个概念是相对于包内导入而言的。包内导入即是包内的模块导入包内部的模块。
Python本身自带了一套工具distutils ,用于发布 Python 应用程序。但 distutils 没有提供定义其它依赖包的功能,setuptools 的真正优点并不在于实现distutils 所能实现的功能——尽管它的确增强了distutils的功能并简化了setup.py 脚本中的内容。setuptools 最大的优势是它在包管理能力方面的增强。它可以使用一种更加透明的方法来查找、下载并安装依赖包;并可以在一个包的多个版本中自由进行切换,这些版本都安装在同一个系统上;也可以声明对某个包的特定版本的需求;还可以只使用一个简单的命令就能更新到某个包的最新版本。 简单来说,Python setuptools可以看做是增强版的distutils,用来管理Python的各种包。
1. build-essential 软件包,为编译程序提供必需软件包的列表信息,这样软件包才知道头文件、库函数在哪里。
__main__ 模块: 我们知道一个有效的.py文件可以作为模块导入,然后被其他的python程序使用其中的类,函数等,这时候这个模块的名字和文件的名字相同;除了可以被import,这个.py文件也可以直接运行,它运行的时候,可能还导入了许多其他的module, 那么这时候从module的角度来看这个包含了很多个模块的运行着的对象,应该叫做什么模块呢? 答案是 : __main__ 模块, 所以__main__ 模块代表着一个运行着的对象。当我们看到 : from __main__ import __requires__ 这个语句的时候,我们知道 :需要在这个运行的对象里面定义一个 __requires__ 变量,因为这个运行的对象可能包含了很多个.py文件,所以可以在其中任意一个文件里面对这个变量赋值,只要赋值是在引用之前就可以了
使用python进行程序编写时,经常会使用第三方模块包。这种包我们可以通过python setup install 进行安装后,通过import XXX或from XXX import yyy 进行导入。不过如果是自己遍写的依赖包,又不想安装到python的相应目录,可以放到本目录里进行import进行调用;为了更清晰的理清程序之间的关系,例如我们会把这种包放到lib目录再调用。本篇就针对常见的模块调用方法汇总下。
看到HTTPError: 404 Client Error: Not Found for url: http://mirrors.aliyun.com/pypi/simple/pkg-resources/以为是阿里云的安全组配置没配好,折腾了半天,原来是访问PyPI镜像源出了问题,将pip的默认的源地址改为国内源即可。具体操作如下:
众所周知,现在程序员因为工作、个人兴趣等对各种系统的需求越来越大,部分人电脑做的还是双系统。其中,比较常见的有各种模拟器、虚拟机在windows上面跑Android、Linux,大家估计都习以为常,Android上面跑windows也是Android 13做的一个有趣的新功能:工作虚拟化支持(不是重点,在这就不过多阐述),但是,你知道么,Android上面可以跑Linux了,重要的是,还无需root。接下来我们将介绍这款1万Star的神器——Termux。
版权声明:本文为木偶人shaon原创文章,转载请注明原文地址,非常感谢。 https://blog.csdn.net/wh211212/article/details/79596160
Termux是一款基于 Android 平台的开源 Linux 终端模拟器,使用 pkg(apt) 进行软件包的管理。最重要的是,它无需手机 root 权限,因此,绝大多数 Android 都可以运行。
想要享受更轻松愉悦的编程,脚本语言是首选。想要更敏捷高效,c++则高山仰止。所以我一直试图在各种通用或者专用的脚本语言中将c++的优势融入其中。原来贡献过一篇《c++和js的混合编程》也是同样的目的。 得益于机器学习领域的发展,Python最近一直维持热度,但Python的速度,比node.js都差距不小,所以使用c++来提高一些速度更有必要。 编写Python的扩展模块已经有不少的不错的框架,但感觉上boost是最好用的一个。
在使用Python处理Word文档时,python-docx库是一个非常有用的工具。
Airflow是一款纯Python编写的任务流调度工具,airflow由许多模块组成,用户可单独安装部分模块比如pip install 'apache-airflow[celery]',pip install 'apache-airflow[hdfs]'等,也可以安装所有的模块pip install 'apache-airflow[all]',下面我们首先介绍的是如何在一台新安装的纯净的RedHat7.4上离线安装apache-airflow[all]。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
from __future__ import absolute_import的作用:
相信多数安卓用户都使用过Qpython这款移动端的Python编辑器吧?之前我也研究过一阵子这个工具,但因为一次简单的爬虫让我对它失望之极。Qpython不支持lxml这个模块,然而python中lxml作为最底层的模块,不管是爬虫还是文档解析,都需要使用它。所以,Termux应运而生….
我们用python在本地电脑上开发完成一个python自动化项目用例,或者开发完成一个django项目。 需要部署到另外一台电脑或者服务器上的时候,需要导入python相关的依赖包,可以用freeze一键生成requirements.txt文件
今天在Linux上使用paramiko模块的时候,出现了错误:ModuleNotFoundError:No module name '_ssl',但是我的系统是安装了openssl的1.0.1的,查了网络上的信息发现,Python3.7以后的版本,需要openssl1.0.2+,或者Libressl2.6.4+。
文章目录 介绍 安装 使用 包管理功能 环境管理功能 渠道管理 实例 介绍 开源包管理系统和环境管理系统 ,包括多种语言的包安装,运行,更新,删除,最重要的是可以解决包依赖问题 支持语言包括 Python,R,Ruby,Lua,Scala,Java,JavaScript,C / C ++,FORTRAN 支持在Windows,macOS和Linux上运行 Conda可以构建不同的环境,同时可以对环境进行保存,加载和切换操作 conda包和环境管理器包含在所有版本的Anaconda和Miniconda中
在遇到Python的时候,我发现Python是最好的语言,但是在慢慢熟悉Julia 之后发现,Python依旧最好的语言 T_T ,原因有可能是系统原因还是其他,加载包比较慢(如果把速度问题解决了,我就可以说Julia是最好的语言了)。
使用国内镜像 https://pypi.tuna.tsinghua.edu.cn/simple 例如我要安装 scrapy
对于Python应用程序,导入模块占用了大部分启动时间。例如,pipenv --version 花费了大约800ms,而import pipenv 花费了700ms。
在CentOS6.3下安装fabric的时候,总是安装不成功,在执行fab命令的时候,总是会抛出错误。 Traceback (most recent call last): File "/usr/bin/fab", line 5, in <module> from pkg_resources import load_entry_point File "/usr/lib/Python2.6/site-packages/pkg_resources.py", line 2655, in <module> working_set.require(__requires__) File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 648, in require needed = self.resolve(parse_requirements(requirements)) File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 546, in resolve raise DistributionNotFound(req) pkg_resources.DistributionNotFound: paramiko>=1.10
学习信息安全有一段时间了,之前在信安之路看到过关于树莓派和 badusb 的文章,不过一直没有尝试。前几天偶然看到termux这个 app,于是想尝试看能不能作为替代品使用。
网上说的思路里面,自己获取下载地址之后通过其他下载工具拖回来是比较好的方式,注意的是拖回来之后验证下checksum会比较安全。此外,下载回来的pkg不能直接打开安装,需要把osxapps.itunes.apple.com host到本地,把pkg放到相应路径后开个http服务来serve。
前两天,我发现有个前同事写的 Shell 脚本经常在出问题,考虑这个脚本一直挺不稳定的,维护起来也挺头疼,原因是 Shell 脚本写稍微复杂一点的逻辑,代码就变得十分臃肿,对比 Python 真的太差劲了。
领取专属 10元无门槛券
手把手带您无忧上云