Python的运行环境安装及开发准备

  • Python纯净安装:可以到Python官网下载Python安装包,不同的系统有不同的安装方式
    官网:https://www.python.org/
  • Anaconda 集成环境,三大系统(win macos linux)都能安装。内建了很多基础数据分析研究库,个人觉得比较大,miniconda是他的简化版,主要优点,内置python和很多库,不用再一个个的网上下载,conda的软件安装方式也不错。
    官网:https://www.anaconda.com/
  • PIP Python 下载各种模块及运行库的程序,一般python环境都附带了。

    **python -m pip install --upgrade pip** //升到最新版pip  
    
  • PIPENV 做Python项目的话一开始最好先了解虚拟环境,主要目地的是各应用的模块运行库等环境能相互独产,并且能方便的移植到不同的机器,并且保证项目依然的可执行性!
    安装:pip install pipenv
  • Pyinstaller pythone 的打包程序,生成可执行的exe文件
    安装:pip install pyinstaller
  • Pycharm pycharm 主流python集成开发环境,开发环境选主流就行. 建项目时如果选的是pipenv后就不需要再在命令行里pipenv install 和 pipshell 了。这个搞了我一天,挺坑的。

官网:https://www.jetbrains.com/

  • 别手工去改写系统环境变量,别手工去改写系统环境变量,别手工去改写系统环境变量,

设置Python虚拟开发环境

  • 个人实验下来 python纯净包一定要安装,pipenv用纯净python来做为项目解释器。anaconda可以不装。

project Interpreter D:pyprojectpdfconvertvenvscriptspython.exe

  • Pycharm 设置-项目-projectedInterpreter-add
    Virualenv environment:

New environment
location D:pyprojectpdfconvertvenv
Base interpreter:D:ProgramFilesPythonpython37python.exe

System Interpreter:
D:Program Filespythonpython37python.exe

Pipenv Environment:
Base interpreter: D:Program FilesPythonPython37python.exe
check install packages rom pipfile
Pipenv executable: Auto-detected:D:Program FilesPythonPython37scriptspipenv.exe

建python虚机方法 使用pipenv方法

Pipenv 的命令:

pipenv install //在项目文件夹路径中 install可以省略
pipenv install --dev //包含开发环境包
注意:这个默认安装在c盘,如果需要更改到其他盘,请设置用户变量:WORKON_HOME为你要设置的路径
set WORKON_HOME=F:\File_Python\pipenv_virtual_environment  #每次安装时都要进行设置

pipenv shell //激活虚拟环境
pipenv install package //在虚拟环境安装包
pipenv install package --dev //在虚拟环境的开发环境中安装,没有确定要不要用。
pipenv --py  //列出虚拟环境的Python可执行文件
pipenv unstall package //在虚拟环境卸载包
pipenv uninstall --all  //卸载所有包
pipenv --venv //查看创建的虚拟环境所在目录,pycharm配置环境时用到
pipenv graph   //查看包对应的依赖关系
exit  //退出虚拟环境
pip list //查看当前环境下的所有包
pipenv install --dev   //根据下载来的pipfile pipfile.lock安装包
pipenv --rm //删除虚拟环境
pipenv run file.py //在虚拟环境中运行程序
pipenv sync  //安装pipfile.lock 中的有的包 !!!!! 换新环境时要用
pipenv lock -r > requirements.txt:生成生产环境的 requirements.txt。添加 --dev 则生成开发环境的 
requirements-dev.txt,也就是pipenv lock -r --dev > requirements-dev.txt

pipenv 不会读取 pip 的配置文件 pip.conf。所以配置 pip 的国内的 pypi 源时,注意修改这个是无效的,这需要修改 Pipfile。
阿里云:http://mirrors.aliyun.com/pypi/simple/
豆瓣(速度快):http://pypi.douban.com/simple/ 
清华大学:https://pypi.tuna.tsinghua.edu.cn/simple/ 
中国科学技术大学:https://pypi.mirrors.ustc.edu.cn/simple/

最新版 pycharm 已经添加了 pipenv 支持,新建项目时,可在 project interpreter 一栏选择使用 pipenv. (记得提前安装好 pipenv)

2018.07.09 吐槽:为啥 pipenv lock 那么慢,简直让人以为电脑卡死了。。

看到 github 上也有一堆关于 lock 慢的 issue. 官方的回应是正在优化,如果实在觉得慢,而且环境不算复杂,可以省略 
lock 这一步(pipenv install xxx --skip-lock)。 

更多命令 请点击>>
pipenv的高级用法了解一下>>

如果你在具有requirements.txt文件的项目中启动了Pipenv,则在把它从项目中删除之前,应该使用Pipenv安装该文件中列出的所有依赖包。

Python requirements.txt的生成与依赖库安装

  • 使用pip生成requirements.txt文件
    pip freeze > requirements.txt
  • 安装requirements.txt依赖 切到虚拟环境目录的Script文件下
    pip install -r 目录/requirements.txt
    pipenv
  • 像virtualenv一样用pipenv命令生成requirements 文件
    pipenv lock -r --dev > requirements.txt
  • pipenv通过requirements.txt安装包
    pipenv install -r requirements.txt

winPython Wheel离线包的安装

https://www.lfd.uci.edu/~gohlke/pythonlibs/

配置pip下载站点

win系统中cmd:%APPDATA%
然后新建pip,新建pip.ini

[global]
time-out=60
index-url=https://pypi.tuna.tsinghua.edu.cn/simple/
[install]
trusted-host=tsinghua.edu.cn

pipreqs 自动分析及导出项目涉及的模块包

pip install pipreqs  //安装
pipreqs ./  //在项目根目录使用
pipreqs ./ --encoding=utf8  //win系统使用时,指定编码格式
pip install -r requriements.txt   //安装库

详细用法:
pipreqs [options] <path>

选项:
--use-local仅使用本地包信息而不是查询PyPI
--pypi-server <url>使用自定义PyPi服务器
--proxy <url>使用Proxy,参数将传递给请求库。你也可以设置
终端中的环境参数:
$ export HTTP_PROXY =“http://10.10.1.10:3128”
$ export HTTPS_PROXY =“https://10.10.1.10:1080”
--debug打印调试信息
--ignore <dirs> ...忽略额外的目录
--encoding <charset>使用编码参数打开文件
--savepath <file>保存给定文件中的需求列表
--print输出标准输出中的需求列表
--force覆盖现有的requirements.txt
--diff <file>将requirements.txt中的模块与项目导入进行比较。
--clean <file>通过删除未在项目中导入的模块来清理requirements.txt。

直接代码切换下载镜像:
可能考虑到是python国内网络的问题,这时我们用国内的镜像源来加速。
pip install 包名 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
这个是豆瓣源

--trusted-host pypi.douban.com 这是为了获得ssl证书的认证,要不然会报错

开发注意事项

  • Python 的判断语句是 if elif else,空语句块用pass
  • Python 的函数必须在调用前先定义,(函数内部调用的函数除外)
  • 不同类型的字符不能用+拼接,改用,
  • 'gbk' codec can't encode character解决方法 在windows下面,新文件的默认编码是gbk,这样的话,python解释器会用gbk编码去解析我们的网络数据流txt,然而txt此时已经是decode过的unicode编码,这样的话就会导致解析不了,出现上述问题。 解决的办法就是,改变目标文件的编码:复制代码代码如下:f = open("out.html","w",encoding='utf-8') 。这样,问题将不复存在。
  • 导出项目的依赖包(特别是没有建独立项目虚拟环境的情况)使用pipreqs,与pip freeze > requirements.txt 导出整个环境不同。
    这个工具的好处是可以通过对项目目录的扫描,自动发现使用了那些类库,自动生成依赖清单(会有偏差)
    pip install pipreqs //安装
    pipreqs ./ //在项目根目录使用
    pipreqs ./ --encoding=utf8 //win系统使用时,指定编码格式
    pip install -r requriements.txt //安装库
    *python中代码换行

1.代码中直接换行: 空格 + (不推荐)
2.加上括号,() {} []中不需要特别加换行符
test2=('str1'
'str2') #但是单个字符串不能换行
3.还有一种使用类似MARKDOWN格式的换行。可以直接呈现所有字符样式。必须用'''包住字符串首尾。
test2=('''str1

           str2''')   #不用再输入\n了

输出
'''str1

           str2''''

*设置 files.exclude 来隐藏相关文件和文件夹
*在打开文件的时候open(r'c:....') 'r'是防止字符转义的 如果路径中出现't'的话 不加r的话t就会被转义 而加了'r'之后't'就能保留原有的样子.在Python的string前面加上‘r’也是一样。
*直接执行.py 需要指定python解释器位置
win上要在文件中导入sys.path. 在Mac和Linux上是可以的,方法是在.py文件的第一行加上一个特殊的注释,再返回命令行,

$ chmod a+x hello.py  //就可以直接运行hello.py了

*python 的取反符号是 "not", not expression

  • 统计生成器的数量 如L是一个生成器 sum(1 for _ in L)
    *函数外调用函数内变量的方法,一个比较简单的解决办法是你在函数外就先声明这个变量,声明成全局变量。然后在函数里面进行操作和赋值。最后就能在函数外获取变量的值了

*python 的离线安装包下载网址:https://www.lfd.uci.edu/~gohlke/pythonlibs/

*数列或数组分别运算
def square(x):
return x**2
map(square,[1,2,3,4,5])
map(lambda x:x/a,[1,2,3,4,5]) *使用 lambda 匿名函数
map(lambda x,y:x/y,[1,2,3,4,5],[5,4,3,2,1]) *提供了两个列表,对相同位置的列表数据进行相加
python3里map前要加List list(map())

*如果提示pip找不到
可以首先执行 python -m ensurepip 然后执行 python -m pip install --upgrade pip 即可更新完毕

*cv2模块在 opencv-python 中


python2 ---python3
改变
*import StringIO修改成import io
*from PIL import Image, ImageDraw, ImageFont #PIL 图像处理模块
*python3里 map 前要加list转换成列表再参加运算
*PIL模块在python3.x中已经替换成pillow模块
python函数参数前的单和双*区别与用途,这两种用法其实都是用来将任意个数的参数导入到python函数中。
单星号():args 将对应的参数(单个或多个)以元组(tuple)的形式导入: (1,2,3,4,5)
双星号():args 将对应的参数(单个或多个)以字典(dict)的形式导入:{a:2,b:3,c:1}
单星号()另一种用法是解压参数列表分别赋给函数 foo(args)
*str.format() 的三种用法 {}、{非负数字}、{变量}.format("val1","val2")
{}花括号数量可以少于参数个数;(非负数字)是按数置取参数,注意不要越界。;{变量} str{name}.format(name="val")
同时使用元组和字典传参,用*来解压元组或字典。
hulk = '绿巨人', '拳头'
captain = {'name': '美国队长', 'weapon': '盾'}
print('我是{}, 我怕{weapon}。'.format(hulk, *captain))
print('我是{name}, 我怕{1}。'.format(hulk, *captain))
更详细的format介绍可以参考这里:https://blog.csdn.net/jpch89/article/details/84099277
*python import 中可以用 . 或.. 表示当前与上一级目录层级,注意不要有"/“. 下一级的目录结构使用.连接。