# 01.配置环境

> 工欲善其事，必先利其器

在开始工作之前，首先准备了解一下基本的知识点

> 只有把基础打好，才能够冲的更远

## 环境搭建

### 在Windows下安装Python

安装python有两种方式:

* 一种通过Python安装包安装
* 另一种通过anaconda安装

接下来介绍如何安装两种方式的安装方法:

### Python安装包安装

* 官方网站:https://www.python.org/

首先进入官网

![img](https://cdn.jsdelivr.net/gh/TheFoxFairy/notebook-picgo@master/img/20200922231515.png)

然后点击Downloads > Windows,会出现如何界面

![img](https://cdn.jsdelivr.net/gh/TheFoxFairy/notebook-picgo@master/img/20200922231515.png)

然后点击 [Latest Python 3 Release - Python 3.7.0](https://www.python.org/downloads/release/python-370/)，往下滑动，出现以下界面

![image-20200909234112012](https://cdn.jsdelivr.net/gh/TheFoxFairy/notebook-picgo@master/img/20200925222511.png)

这里有很多版本的，在windows中安装可以选择[Windows x86-64 executable installer](https://www.python.org/ftp/python/3.7.0/python-3.7.0-amd64.exe)和[Windows x86 executable installer](https://www.python.org/ftp/python/3.7.0/python-3.7.0.exe) 分别是对应64位的windows和32位的windows，选择适合的版本进行下载，下载完后，双击安装python.exe,出现以下界面

![img](https://cdn.jsdelivr.net/gh/TheFoxFairy/notebook-picgo@master/img/20200925222512.png)

第一个是默认安装，第二个是用户自定义安装，最下方的复选框，勾选后，表示python路径自动添加到环境变量中

本文选择用户自定义安装

![img](https://cdn.jsdelivr.net/gh/TheFoxFairy/notebook-picgo@master/img/20200925222513.png)

![img](https://cdn.jsdelivr.net/gh/TheFoxFairy/notebook-picgo@master/img/20200925222514.png)

然后点击安装，安装完后，出现successful，就表示安装成功了

现在测试，是否安装成功了，按下win+r,并输入cmd，进入控制平台，在命令框下输入python

![img](https://cdn.jsdelivr.net/gh/TheFoxFairy/notebook-picgo@master/img/20200925222515.png)

出现以上类似内容，就证明安装成功了

如果出现以下提示

![img](https://cdn.jsdelivr.net/gh/TheFoxFairy/notebook-picgo@master/img/20200925222516.png)

代表环境路径，没有配置好，需要将python.exe所在的python路径添加到环境变量中，

![img](https://cdn.jsdelivr.net/gh/TheFoxFairy/notebook-picgo@master/img/20200925222517.png)

首先右键点击此电脑，选中属性，出现如下界面

![img](https://cdn.jsdelivr.net/gh/TheFoxFairy/notebook-picgo@master/img/20200925222518.png)

选中高级系统设置，然后可以看到有环境变量的选项，点击进去，出现如下视图

![img](https://cdn.jsdelivr.net/gh/TheFoxFairy/notebook-picgo@master/img/20200925222519.png)

选中系统变量下的Path选项，然后，点击编辑，然后找到python.exe的所在路径

![img](https://cdn.jsdelivr.net/gh/TheFoxFairy/notebook-picgo@master/img/20200925222520.png)

粘贴复制到刚才编辑变量处，点击新建

![img](https://cdn.jsdelivr.net/gh/TheFoxFairy/notebook-picgo@master/img/20200925222521.png)

然后点击确定，就可以了

有可能自己的电脑下装了很多不同版本的python，为了区别开来，可以在python目录，将python.exe，复制粘贴并命名为新的名字，作为原来的python.exe的代替

![img](https://cdn.jsdelivr.net/gh/TheFoxFairy/notebook-picgo@master/img/20200925222522.png)

测试一下，在命令框中输入python36

![img](https://cdn.jsdelivr.net/gh/TheFoxFairy/notebook-picgo@master/img/20200925222523.png)

另外还需要将python下的Scripts目录添加到环境变量中

![img](https://cdn.jsdelivr.net/gh/TheFoxFairy/notebook-picgo@master/img/20200925222524.png)

### Anaconda安装

* 官方网站:https://www.anaconda.com/download/

首先进入官网

![img](https://cdn.jsdelivr.net/gh/TheFoxFairy/notebook-picgo@master/img/20200925222525.png)

电脑是64位的，安装[64-Bit Graphical Installer (631 MB)](https://repo.anaconda.com/archive/Anaconda3-5.2.0-Windows-x86_64.exe)

电脑是32位的，安装[32-Bit Graphical Installer (506 MB)](https://repo.anaconda.com/archive/Anaconda3-5.2.0-Windows-x86.exe)

> 温馨提示
>
> 建议使用anaconda

> 工欲善其事，必先利其器

## 安装Pycharm

进入[官网](https://www.jetbrains.com/pycharm/download/#section=windows)

![img](https://cdn.jsdelivr.net/gh/TheFoxFairy/notebook-picgo@master/img/20200925222526.png)

有两个版本，professional是专业版，需要进行收费，community是社区版，是免费的

为了自己更好的进行学习，选用professional版本的

下载过程\~

> 注意安装路径尽量不使用带有**中文或空格**的目录，这样在之后的使用过程中减少一些莫名的错误

安装完成后，不要着急打开，首先需要进行破解，不然无法使用

![img](https://cdn.jsdelivr.net/gh/TheFoxFairy/notebook-picgo@master/img/20200925222527.png)

这里采用补丁进行破解

首先点击

![image-20200909073511834](https://cdn.jsdelivr.net/gh/TheFoxFairy/notebook-picgo@master/img/20200925222528.png)

进行使用，然后打开应用

![img](https://cdn.jsdelivr.net/gh/TheFoxFairy/notebook-picgo@master/img/20200925222529.png)

之后下载 jetbrains-agent-latest.zip，然后不用解压！不用解压！直接拖到安装目录，再次启动就自动安装了！

```
链接：https://pan.baidu.com/s/14Va_A-xhWJajB9fS85oQLA 
提取码：v8vu
```

## pycharm 基本用法

### 新建项目

File > New Project > Pure Python

![img](https://cdn.jsdelivr.net/gh/TheFoxFairy/notebook-picgo@master/img/20200925222530.png)

最后点击create即可，如下图所示

![img](https://cdn.jsdelivr.net/gh/TheFoxFairy/notebook-picgo@master/img/20200925222531.png)

然后右键点中项目，然后选中New > Python File

![image-20200909234144187](https://cdn.jsdelivr.net/gh/TheFoxFairy/notebook-picgo@master/img/20200925222532.png)

**运行**

![img](https://cdn.jsdelivr.net/gh/TheFoxFairy/notebook-picgo@master/img/20200925222533.png)

对配置pycharm，首先进入设置中进行配置

![img](https://cdn.jsdelivr.net/gh/TheFoxFairy/notebook-picgo@master/img/20200925222534.png)

### 编码设置

为了避免编码带来的问题，对文件编码进行设置

![img](https://cdn.jsdelivr.net/gh/TheFoxFairy/notebook-picgo@master/img/20200925222535.png)

### 环境配置

当有多个版本的时候，可以通过Project Interpreter 方便的进行管理

![image-20200909234206816](https://cdn.jsdelivr.net/gh/TheFoxFairy/notebook-picgo@master/img/20200925222536.png)

有一个下拉选项框，可以手动选中需要的python版本，也可以删除不需要的python版本

有一个"+"，可以方便的添加python模块，下面的"-"，与"+"相反

### 字体

![img](https://cdn.jsdelivr.net/gh/TheFoxFairy/notebook-picgo@master/img/20200925222537.png)

Font:字体

Size:字体大小

### Pycharm快捷键

| 键                  | 作用      |
| ------------------ | ------- |
| ctrl + shift + f10 | 运行      |
| ctrl + /           | 注释      |
| 双击 shift 键         | 全局查找    |
| ctrl + P           | 查看函数参数  |
| ctrl + space       | 基本的代码完成 |
| shift + f9         | 调试      |
| shift + enter      | 另起一行    |
| ctrl + D           | 复制      |

### 调试

![img](https://cdn.jsdelivr.net/gh/TheFoxFairy/notebook-picgo@master/img/20200925222538.png)

或者

![img](https://cdn.jsdelivr.net/gh/TheFoxFairy/notebook-picgo@master/img/20200925222539.png)

简单介绍一下调试栏的几个重要的按钮作用：

![img](https://cdn.jsdelivr.net/gh/TheFoxFairy/notebook-picgo@master/img/20200925222540.jpg)

**Resume Program**：断点调试后，点击按钮，继续执行程序；

![img](https://cdn.jsdelivr.net/gh/TheFoxFairy/notebook-picgo@master/img/20200925222541.jpg)

**Step Over**：在单步执行时，在函数内遇到子函数时不会进入子函数内单步执行，而是将子函数整个执行完再停止，也就是把子函数整个作为一步。有一点,经过我们简单的调试,在不存在子函数的情况下是和**Step Into**效果一样的（简而言之，越过子函数，但子函数会执行）；

![img](https://cdn.jsdelivr.net/gh/TheFoxFairy/notebook-picgo@master/img/20200925222542.jpg)

**Step Into**：单步执行，遇到子函数就进入并且继续单步执行（简而言之，进入子函数）；

![img](https://cdn.jsdelivr.net/gh/TheFoxFairy/notebook-picgo@master/img/20200925222543.jpg)

**Step Out**： 当单步执行到子函数内时，用step out就可以执行完子函数余下部分，并返回到上一层函数。

### 设置Pycharm背景皮肤

点击Background Image

![img](https://cdn.jsdelivr.net/gh/TheFoxFairy/notebook-picgo@master/img/20200925222544.png)

然后选择图片，便可以了

![img](https://cdn.jsdelivr.net/gh/TheFoxFairy/notebook-picgo@master/img/20200925222545.png)

## 安装 Jupyter

> 什么是Jupyter?

```
Jupyter Notebook（此前被称为IPython notebook）是一个交互式笔记本，支持运行40 多种编程语言。 
Jupyter Notebook 的本质是一个Web 应用程序，便于创建和共享文学化程序文档，支持实时代码，数学方程，可视化和markdown
```

### 安装Jupyter

```
python3 -m pip install --upgrade pip
python3 -m pip install jupyter
```

或者直接

```
pip install jupyter
```

### 运行

安装完成后，运行Jupyter notebook，在命令框下，输入如下命令即可:

```
jupyter notebook
```

在浏览器中输入 localhost:8888 会出现如下界面

![img](https://cdn.jsdelivr.net/gh/TheFoxFairy/notebook-picgo@master/img/20200925222546.png)

> 温馨提示:
>
> jupyrt notebook 应该需要创建一个文件夹，然后在当前文件夹目录下运行命令

### jupyter notebook常用命令

* **帮助**

```
jupyter notebook --help 或者 jupyter notebook -h
```

* **启动**

#### 默认端口启动

```
jupyter notebook
```

> 之后在Jupyter Notebook的所有操作，都请保持终端不要关闭，因为一旦关闭终端，就会断开与本地服务器的链接，将无法在Jupyter Notebook中进行其他操作

#### 指定端口启动

```
jupyter notebook --port <port_number>

例如:jupyter notebook --port 8889
```

#### 启动服务器但不打开浏览器

```
jupyter-notebook --no-browser
```

#### 以root身份启动

```
jupyter notebook --ip=127.0.0.1 --port 8000 --allow-root
```

#### 生成jupyter的配置文件

```
jupyter notebook --generate-config
```

#### 修改jupyter的配置文件

```
vim ~/.jupyter/jupyter_notebook_config.py
```

`将293行 #c.NotebookApp.token = '<generated>'修改为c.NotebookApp.token = 'password'，则密码就改为password`

#### 修改密码

```
启动jupyter后，新建一个python

输入第一行
from notebook.auth import passwd
alt + enter 来执行这个命令并进入下一行；在下一行里面输入：
passwd()
```

### Markdown用法

![img](https://cdn.jsdelivr.net/gh/TheFoxFairy/notebook-picgo@master/img/20200925222547.png)

### 常用魔法函数

| 魔法函数                | 作用                               |
| ------------------- | -------------------------------- |
| %%writefile         | 调用外部python脚本                     |
| %run                | 调用外部python脚本                     |
| %timeit             | 测试单行语句的执行时间                      |
| %%timeit            | 测试整个单元中代码的执行时间                   |
| % matplotlib inline | 显示matplotlib包生成的图形               |
| %%writefile         | 写入文件                             |
| %pdb                | 调试程序                             |
| %pwd                | 查看当前工作目录                         |
| %ls                 | 查看目录文件列表                         |
| %reset              | 清除全部变量                           |
| %who                | 查看所有全局变量的名称，若给定类型参数，只返回该类型的变量 列表 |
| %whos               | 显示所有的全局变量名称、类型、值/信息              |
| %xmode Plain        | 设置为当异常发生时只展示简单的异常信息              |
| %xmode Verbose      | 设置为当异常发生时展示详细的异常信息               |
| %debug              | bug调试，输入quit退出调试                 |
| %env                | 列出全部环境变量                         |

## jupyter如何生成PDF文件

### 相关资源下载

* `Pandoc`:http://so.csdn.net/so/search/s.do?q=pandoc\&t=doc\&o=\&s=all\&l=null
* `Miktex`:https://miktex.org/

下载相关资源即可生成pdf文件

### 中文乱码处理

* `ipython nbconvert --to latex xxx.ipynb`
*   修改tex 或者 修改`E:\Anaconda3\Lib\site-packages\nbconvert\templates\latex\article.tplx`

    ```
    双击打开转换的文件在\documentclass{article}后面插入 
    \usepackage{fontspec, xunicode, xltxtra} 
    \setmainfont{Microsoft YaHei} 
    \usepackage{ctex}
    ```

    <img src="https://cdn.jsdelivr.net/gh/TheFoxFairy/notebook-picgo@master/img/20200925222548.png" alt="image-20200909074942330" data-size="original">
*   编译tex，生成pdf

    ```
    xelatex xxx.tex
    ```

## 数学公式

* 约定
  * 使用{}包括一个表达式当成整体
  * 需要使用`'$$' 、 '$$'`一对将数学公式包括起来
*   示例:

    ```
       $$ y^{2x} $$
    ```

    如下: $$y^{2x}$$

### 上标

示例:

```
$$x^2$$
```

如下: $$x^2$$

$$ex^{2x}$$

### 下标

*   第一种情况 示例:

    ```
    $$x_i$$
    ```

    如下: $$x_i$$
*   第二种情况 示例:

    ```
    $$_{10}C_5$$
    ```

    如下: $$_{10}C_5$$
*   第三种情况 示例:

    ```
    $$\underset{k}{argmax}$$
    ```

    如下: $$\underset{k}{argmax}$$

### 平方根

示例:

```
$$ \sqrt{2\pi} $$
```

如下: $$\sqrt{2\pi}$$

### 符号

*   希腊字母

    ```
    \alpha, \beta, \gamma
    ```

    如下: $$\alpha, \beta, \gamma$$
*   大写希腊字母

    ```
    \Phi, \Lambda, \Gamma
    ```

    如下: $$\Phi, \Lambda, \Gamma$$
*   乘、正负、并集、卷积符号

    ```
    \times, \pm, \cup, \oplus
    ```

    如下: $$\times, \pm, \cup, \oplus$$
*   三角函数

    ```
    \sin, \cosh, \arctan
    ```

    如下: $$\sin, \cosh, \arctan$$
*   关系运算

    ```
    \leq, \geq, \approx, \neq
    ```

    如下: $$\leq, \geq, \approx, \neq$$
*   3点符号

    ```
    \cdots, \ldots, \ddots
    ```

    如下: $$\cdots, \ldots, \ddots$$
*   其他的变量符

    ```
    \infty, \nabla, \partial
    ```

    如下: $$\infty, \nabla, \partial$$

### 口音

* 在符号上面加个帽子： `\hat x`，显示为

$$\hat x$$

````
如果在多个字符上加帽子，可以使用\widehat ,如 ```widehat{abs} ```显示为
````

$$widehat{abs}$$

*   为了显示平均数，通常需要在变量上面添加一条线，通过`\bar x`，显示为

    $$\bar x$$

    如果是多个字符，可以使用 \overline{abs}，显示为 $$\overline{abs}$$
* 导数通过点表示，如 \dot x 和 \ddot x ，显示为 $$\dot x 和 \ddot x$$
* 箭头为 \vec{x}, \overrightarrow{AB} ，显示为 $$\vec{x}, \overrightarrow{AB}$$

### 括号

*   圆括号

    ```
    (\frac{dx}{dy})^{\frac{1}{3}}
    ```

    如下: $$(\frac{dx}{dy})^{\frac{1}{3}}$$
*   拉伸括号，使用 \left 和 \right

    ```
    $$z=\left(\frac{dx}{dy}\right)^{1/3}$$
    ```

    如下: $$z=\left(\frac{dx}{dy}\right)^{1/3}$$

特殊的括号

* 直线 | 或写为 \vert ，\mid 显示效果和 \vert 非常相似，但 \mid 宽度比 \vert 大
* 尖括号，例如`$$ {\langle} {\phi} \mid {\psi} {\rangle} $$` 显示为 $${\langle} {\phi} \mid {\psi} {\rangle}$$
* 矩阵括号，如 `$$\left[\begin{matrix}a & b \cr c & d\end{matrix}\right]$$` 显示为 $$\left[\begin{matrix}a & b \cr c & d\end{matrix}\right]$$ 或者是：`$$\left\lgroup\begin{matrix}a & b \cr c & d\end{matrix}\right\rgroup$$` $$\left\lgroup\begin{matrix}a & b \cr c & d\end{matrix}\right\rgroup$$

### 字体及其选项

*   非斜体罗马文本

    ```
    \textrm{abcdefghijklmn123456} 或者 \rm{abcdefghijklmn123456}
    ```

    如下: $$\textrm{abcdefghijklmn123456} 或者 \rm{abcdefghijklmn123456}$$
*   斜体字母

    ```
    $$ \mathit{abcdefghijklmn123456} $$
    ```

    如下: $$\mathit{abcdefghijklmn123456}$$
*   Sans serif 字体

    ```
    \mathsf{abcdefghijklmn123456}
    ```

    如下: $$\mathsf{abcdefghijklmn123456}$$
*   Typerwriter 字体

    ```
    \mathtt{abcdefghijklmn123456}
    ```

    如下: $$\mathtt{abcdefghijklmn123456}$$
*   Calligraphic 字体

    ```
    \mathcal{abcdefghijklmn123456}
    ```

    如下: $$\mathcal{abcdefghijklmn123456}$$
*   Blackborad bold 字体

    ```
    \mathbb{abcdefghijklmn123456}
    ```

    如下: $$\mathbb{abcdefghijklmn123456}$$
*   Boldsymbol 字体加粗

    ```
    \boldsymbol{A\cdot x}=\lambda\cdot v
    ```

    如下: $$\boldsymbol{A\cdot x}=\lambda\cdot v$$

### 空格

*   在LaTeX中，符号之间的空格会被自动移除，所以不能直接写空格

    ```
    $$ \int f(x) dx $$
    ```

    如下: $$\int f(x) dx$$
*   函数和 dx 之间没有空格，你能通过 , 或 : 或 ;添加空格，其空格宽度分别为从小到大

    ```
    $$\int f(x) ; dx$$
    ```

    如下: $$\int f(x) ; dx$$

### 转义字符

```
如果你需要使用特殊的字符，比如 { 或 _ ，你必须通过反斜杠进行转义，例如 { ，_ ，$ 分别表示 { 、 _ 、 $ ，\ 的转义为 \\
```

### 等式对齐

*   通过 \ 断开两个或多个等式，可实现等式中部对齐

    ```
    $$
    a_1=b_1+c_1 \\
    a_2=b_2+c_2+d_2 \\
    a_3=b_3+c_3
    $$
    ```

    如下: $$a_1=b_1+c_1 \\ a_2=b_2+c_2+d_2 \\ a_3=b_3+c_3$$
*   左对齐

    ```
    $$
    \begin{align}
    a_1&=b_1+c_1 \\
    a_2&=b_2+c_2+d_2 \\
    a_3&=b_3+c_3
    \end{align}
    $$
    ```

    如下: $$\begin{align} a_1&=b_1+c_1 \\ a_2&=b_2+c_2+d_2 \\ a_3&=b_3+c_3 \end{align}$$
*   对方程进行编号,使用\tag

    ```
    $$
    \begin{align}
    a_1&=b_1+c_1 \tag{1}\\
    a_2&=b_2+c_2+d_2 \tag{2}\\
    a_3&=b_3+c_3 \tag{3}
    \end{align}
    $$
    ```

    如下: $$\begin{align} a_1&=b_1+c_1 \tag{1}\\ a_2&=b_2+c_2+d_2 \tag{2}\\ a_3&=b_3+c_3 \tag{3} \end{align}$$

### 分段函数

*   使用符号函数sign

    ```
    $$
    sign(x)=\begin{cases}
    1,&x>0 \\ 0,&x=0 \cr -1,&x<0
    \end{cases}
    $$
    ```

    如下: $$sign(x)=\begin{cases} 1,&x>0 \\ 0,&x=0 \cr -1,&x<0 \end{cases}$$

### 总结

* 命令
  1.  指数和下标可以用^和\_后，跟相应字符实现。例如\`\`$a^3$ , $a\_3$\`表示

      $a^3$ , $a\_3$
  2.  平方根的为\sqrt, n次方根为\sqrt\[n]。例如 `$\sqrt{a} \sqrt[3]{a}$`

      $\sqrt{a} 、 \sqrt\[3]{a}$
  3.  命令 \overline 和 \underline 表示表达式上的上、下坊给出以水平大括号。例如：`$\overline{m+n}$` 表示

      $\overline{m+n}$

      `$\underline{m+n}$ 表示`

      $\underline{m+n}$
  4.  命令 \overbrace 和 \underbrace 在表达式的上、下方给出一水平的大括号，例如 `$\underbrace{a+b+\cdots+j}_{10}$`表示

      $\underbrace{a+b+\cdots+j}\_{10}$
  5.  向量(Vector)通常用于上方有小箭头的变量表示，可以有\vec得到，例如 `$\vec a$`表示

      $\vec a$

      `$$\overrightarrow{AB}$ 、\overleftarrow{AB}$ 表示`

      $\overrightarrow{AB}$ 、$\overleftarrow{AB}$
  6.  `分数(fraction) 使用 \frac{...}{...} 排版，一般来说，1/2 这种形式更受欢迎，以为对于少量的分式，它看起来更好些。 $\frac{-b\pm\sqrt{b^2-4ac}}{2a}$ 表示`

      $\frac{-b\pm\sqrt{b^2-4ac\}}{2a}$
  7.  积分运算符(integral operator) 用 \int 来生成，例如`$\int_{0}^{\pi}{\tan x}$`表示

      $\int\_{0}^{\pi}{\tan x}$
  8.  求和运算符(sum operator) 用 \sum 来生成，例如 `$\sum_{i=0}^{n}{i}$`表示

      $\sum\_{i=0}^{n}{i}$
  9.  乘积运算符(product operator) 用 \prod 生成，例如 `$\prod_{i=1}^{9}{i}$` 表示

      $\sum\_{i=0}^{n}{i}$

### 数学符号表

![image-20200909075045534](https://cdn.jsdelivr.net/gh/TheFoxFairy/notebook-picgo@master/img/20200925222549.png)

## 如何在jupyter中集成MATLAB

* 先安装matlab
* 然后安装anaconda
*   切换到E:\MATLAB\R2018a\extern\engines\python

    ```
    pip setup.py install
    ```
* pip install matlab\_kernel
* 测试

```
x=1:1:5;%x轴上的数据，第一个值代表数据开始，第二个值代表间隔，第三个值代表终止
 a=[203.024,113.857,256.259,244.888,293.376]; %a数据y值
 b=[334.4,143.2,297.4,487.2,596.2]; %b数据y值
 plot(x,a,'-*b',x,b,'-or'); %线性，颜色，标记
axis([0,6,0,700])  %确定x轴与y轴框图大小
set(gca,'XTick',[0:1:6]) %x轴范围1-6，间隔1
set(gca,'YTick',[0:100:700]) %y轴范围0-700，间隔100
legend('Neo4j','MongoDB');   %右上角标注
xlabel('深度')  %x轴坐标描述
ylabel('时间（ms）') %y轴坐标描述
```

![img](https://cdn.jsdelivr.net/gh/TheFoxFairy/notebook-picgo@master/img/20200925222550.png)

## 虚拟环境

> 首先来讲下为什么要安装搭建虚拟环境?

* 搭建独立的python运行环境，防止与其他版本的python产生冲突
* 有助于包管理和避免版本的冲突
* 卸载方便

> 接下来开始安装虚拟环境

### 安装virtualenv

```
pip install virtualenv
```

#### 创建项目文件

```
# 创建文件
F:\py_virtualenv>mkdir app

# 切换目录
F:\py_virtualenv>cd app

F:\py_virtualenv\app>
```

#### 指定版本创建

```
mkvirtualenv --python=D:\py\python2.7\python.exe app
```

#### 安装虚拟环境

在自定义的目录下安装虚拟环境，输入 virtualenv 虚拟环境名

```
F:\py_virtualenv\app>virtualenv django
Using base prefix 'e:\\anaconda3'
New python executable in F:\py_virtualenv\app\django\Scripts\python.exe
Installing setuptools, pip, wheel...done.
```

会在当前目录创建一个django 文件，切换到当前目录下Scripts

```
F:\py_virtualenv\app>cd django

F:\py_virtualenv\app\django>cd Scripts

F:\py_virtualenv\app\django\Scripts>
```

![img](https://cdn.jsdelivr.net/gh/TheFoxFairy/notebook-picgo@master/img/20200925222551.png)

#### 启动虚拟环境

输入如下命令进行命令

```
activate
```

如:

```
F:\py_virtualenv\app\django\Scripts>activate

(django) F:\py_virtualenv\app\django\Scripts>
```

在前面会出现，自定义的虚拟环境的名字

#### 退出虚拟环境

输入如下命令

```
deactivate
```

如:

```
(django) F:\py_virtualenv\app\django\Scripts>deactivate
F:\py_virtualenv\app\django\Scripts>
```

### 安装virtualenvwrapper

为了更方便使用virtualenv，借助 virtualenvwrapper 来安装虚拟环境

#### 定义默认的安装路径

通过 计算机 > 属性 > 高级系统设置 > 环境变量

然后在系统变量中新建"变量名":WORKON\_HOME，变量值:"自定义的路径"。

#### 创建环境变量命令:

```
mkvirtualenv venv
```

如:

```
C:\Users\tokimeki>mkvirtualenv venv
Using base prefix 'e:\\anaconda3'
New python executable in F:\py_virtualenv\venv\Scripts\python.exe
Installing setuptools, pip, wheel...done.
```

#### 列出所有虚拟环境命令:

```
lsvirtualenv
```

如:

```
(venv) C:\Users\tokimeki>lsvirtualenv

dir /b /ad "F:\py_virtualenv"
==============================================================================
app
venv
```

#### 激活虚拟环境命令:

```
workon venv
```

如:

```
C:\Users\tokimeki>workon venv
(venv) C:\Users\tokimeki>
```

#### 进入虚拟环境目录命令:

```
cdsitepackages
```

如:

```
(venv) C:\Users\tokimeki>cdsitepackages
(venv) F:\py_virtualenv\venv\Lib\site-packages>
```

#### **列出site-packages目录的所有软件包 命令**

```
lssitepackages
```

如:

```
(venv) F:\py_virtualenv\venv\Lib\site-packages>lssitepackages

dir /b "F:\py_virtualenv\venv\Lib\site-packages"
==============================================================================
easy_install.py
pip
pip-18.0.dist-info
pkg_resources
setuptools
setuptools-40.4.2.dist-info
wheel
wheel-0.31.1.dist-info
__pycache__
```

#### 退出虚拟环境命令:

```
deactivate
```

如:

```
(venv) F:\py_virtualenv\venv\Lib\site-packages>deactivate

F:\py_virtualenv\venv\Lib\site-packages>
```

#### 删除虚拟环境命令:

```
rmvirtualenv 虚拟环境名字
```

如:

```
F:\py_virtualenv\venv\Lib\site-packages>rmvirtualenv app

    Deleted F:\py_virtualenv\app
```

### 重建Python环境

#### 冻结环境

所谓 冻结(freeze) 环境，就是将当前环境的软件包等固定下来:

```
# 安装包列表保存到文件packages.txt中
pip freeze > requirements.txt
```

#### 重建环境

重建(rebuild) 环境就是在部署的时候，在生产环境安装好对应版本的软件包，不要出现版本兼容等问题:

```
pip install -r requirements.txt
```

## 交互式解释器

当启动python后，会有下面类似的提示

```
C:\Users\tokimeki>python
Python 3.6.5 |Anaconda, Inc.| (default, Mar 29 2018, 13:32:41) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
```

现在来输入第一个程序

```
>>> print("HelloWorld")
```

当按下回车后，会得到如下输出

```
HelloWorld
```

## 数据

在python编程中，万物皆对象，实际上数据类型是类，而变量是这些类的实例化对象

### 数据类型

*   数字:Number

    * 整型:int
    * 浮点型:float
    * 复数:complex
    * 布尔值:bool

    ```
    python3中没有了long类型，现在只有一种整型 int,表示长整型
    ```
* 字符串:String
  * 字符串是 Unicode 字符的序列，可以使用单引号 '' 和双引号 "" 来表示字符串，而多行的字符串可以使用 ''' 和 """ 来表示
* 列表:List
* 元组:Tuple
* 集合:Set
* 字典:Dictionary

在标准数据类型中:

* 不可变数据（3 个）：Number（数字）、String（字符串）、Tuple（元组）；
* 可变数据（3 个）：List（列表）、Dictionary（字典）、Set（集合）。

在后面会慢慢讲解的，现在大致了解一下

现在来补充一点知识

#### 多个变量赋值

```
a = b = c = 1
```

上面的实例，创建了一个整型对象，值为1，从后向前进行赋值，而且三个变量都指向通过一个内存地址

#### 为多个对象赋值

```
a,b,c=1,2,'angle'
```

#### [isinstance()函数](01.-pei-zhi-huan-jing):判断一个对象是否是一个已知的类型

#### 创建对象

```
var = 1
```

#### 删除对象

通过使用del语句删除对象引用

```
del var
```

可以删除多个对象

```
del var1,var2
```

### Python数据类型转换

有时候，需要对数据内置的类型进行转换，数据类型的转换，只需要将数据类型作为函数名即可

以下几个内置的函数可以执行数据类型之间的转换。这些函数返回一个新的对象，表示转换的值

| 函数                     | 描述                              |
| ---------------------- | ------------------------------- |
| int(x \[,base])        | 将x转换为一个整数                       |
| float(x)               | 将x转换到一个浮点数                      |
| complex(real \[,imag]) | 创建一个复数                          |
| str(x)                 | 将对象 x 转换为字符串                    |
| repr(x)                | 将对象 x 转换为表达式字符串                 |
| eval(str)              | 用来计算在字符串中的有效Python表达式,并返回一个对象   |
| tuple(s)               | 将序列 s 转换为一个元组                   |
| list(s)                | 将序列 s 转换为一个列表                   |
| set(s)                 | 转换为可变集合                         |
| dict(d)                | 创建一个字典。d 必须是一个序列 (key,value)元组。 |
| frozenset(s)           | 转换为不可变集合                        |
| chr(x)                 | 将一个整数转换为一个字符                    |
| ord(x)                 | 将一个字符转换为它的整数值                   |
| hex(x)                 | 将一个整数转换为一个十六进制字符串               |
| oct(x)                 | 将一个整数转换为一个八进制字符串                |

## 输入输出

### 打印输出

首先来定义一个变量

```
>>> a = "HelloWorld"
```

后面通过几种不同的方式，打印这个变量

#### 第一种

直接使用print()打印a变量

```
>>> print(a)
HelloWorld
```

#### 第二种

使用%输出a变量

```
>>> print("%s" % a)
HelloWorld
```

> 解释:
>
> %s:占位符，为字符串占据一个位置

#### 第三种

使用format()方法，格式化输出

```
>>> print("{}".format(a))
HelloWorld
```

或者

```
>>> print("{0}".format(a))
HelloWorld
```

也可以通过关键字参数输出

```
print("{a}".format(a=a))
```

> 注意:括号中的0，代表format中参数的顺序

#### 提示

如何输出小数点位数?

比如定义一个a=1.234,输出保留一位

可以通过%.nf实现，n代表的是保留的位数

```
>>> print("%.2f" % a)
1.23


>>> print("{:.2f}".format(a))
1.23
```

### 占位符

#### 百分号

语法:

```
%[(name)][flags][width].[precision]typecode
```

* name 可选，用于选择指定的key
* width 可选，占有宽度
* .precision 可选，小数点后保留的位数
* flags 可选，可供选择的值有:
  * _+ 右对齐；正数前加正好，负数前加负号；_
  * _- 左对齐；正数前无符号，负数前加负号；_
  * _空格 右对齐；正数前加空格，负数前加负号；_
  * _0 右对齐；正数前无符号，负数前加负号；用0填充空白处_

```
print("%-10d" % 100)
```

* typecode 必选

```
- s，获取传入对象的__str__方法的返回值，并将其格式化到指定位置
- r，获取传入对象的__repr__方法的返回值，并将其格式化到指定位置
- c，整数：将数字转换成其unicode对应的值，10进制范围为 0 <= i <= 1114111（py27则只支持0-255）；字符：将字符添加到指定位置
- o，将整数转换成 八  进制表示，并将其格式化到指定位置
- x，将整数转换成十六进制表示，并将其格式化到指定位置
- d，将整数、浮点数转换成 十 进制表示，并将其格式化到指定位置
- e，将整数、浮点数转换成科学计数法，并将其格式化到指定位置（小写e）
- E，将整数、浮点数转换成科学计数法，并将其格式化到指定位置（大写E）
- f， 将整数、浮点数转换成浮点数表示，并将其格式化到指定位置（默认保留小数点后6位）
- F，同上
- g，自动调整将整数、浮点数转换成 浮点型或科学计数法表示（超过6位数用科学计数法），并将其格式化到指定位置（如果是科学计数则是e；）
- G，自动调整将整数、浮点数转换成 浮点型或科学计数法表示（超过6位数用科学计数法），并将其格式化到指定位置（如果是科学计数则是E；）
- %，当字符串中存在格式化标志时，需要用 %%表示一个百分号
```

实例:

```
print("%-10s" % 'angle')
print(".2f" % 1.236)
```

### format

语法:

```
[[fill]align][sign][#][0][width][,][.precision][type]
```

* fill 【可选】空白处填充的字符

```
print("{:-<10}".format(1))

运行结果：

1---------
```

* align 【可选】对齐方式（需配合width使用）
*
  * _<，内容左对齐_
  * _>，内容右对齐(默认)_
  * _＝，内容右对齐，将符号放置在填充字符的左侧，且只对数字类型有效。 即使：符号+填充物+数字_
  * _^，内容居中_

```
print("{: <10}".format(1))
print("{:>10}".format(1))

运行结果:

1         
         1
```

* sign:【可选】有无符号数字
  * +，正号加正，负号加负；
  * -，正号不变，负号加负；
  * 空格 ，正号空格，负号加负；

```
```

* \# :【可选】对于二进制、八进制、十六进制，如果加上#，会显示 0b/0o/0x，否则不显示

```
print("{:#b}".format(1000000))


>>> 0b11110100001001000000
```

*   ，:【可选】为数字添加分隔符,用于显示数字的

    千位分隔符，如：1,000,000

```
print("{:,}".format(1000000))
```

* width :【可选】格式化位所占宽度

```
print("{:10}".format(1000000))
```

* .precision :【可选】小数位保留精度

```
print("{:.2f}".format(1.123456))

print("{:.2}".format(1.123456))

运行结果:

1.12
1.1

注意:有区别喔
```

* type:【可选】格式化类型
  * _传入” 字符串类型 “的参数_
    * _s，格式化字符串类型数据_
    * _空白，未指定类型，则默认是None，同s_
  * _传入“ 整数类型 ”的参数_
    * _b，将10进制整数自动转换成2进制表示然后格式化_
    * _c，将10进制整数自动转换为其对应的unicode字符_
    * _d，十进制整数_
    * _o，将10进制整数自动转换成8进制表示然后格式化；_
    * _x，将10进制整数自动转换成16进制表示然后格式化（小写x）_
    * _X，将10进制整数自动转换成16进制表示然后格式化（大写X）_
  * _传入“ 浮点型或小数类型 ”的参数_
    * _e， 转换为科学计数法（小写e）表示，然后格式化；_
    * _E， 转换为科学计数法（大写E）表示，然后格式化;_
    * _f ， 转换为浮点型（默认小数点后保留6位）表示，然后格式化；_
    * _F， 转换为浮点型（默认小数点后保留6位）表示，然后格式化；_
    * _g， 自动在e和f中切换_
    * _G， 自动在E和F中切换_
    * _%，显示百分比（默认显示小数点后6位）_

```
print("{:b}".format(1000000))
```

### print函数的几个常用参数

```
print(end=,sep=,)
```

* end:以什么字符作为结尾，默认
* sep:以什么字符作为间隔符，默认为空格

## 读取键盘输入

讲完了输出，现在开始讲解如何获取输入

使用input函数就可以获取到输入的值

示例:从键盘上获取"Helloworld"字符串

```
>>> a = input()
Helloworld
>>> a
'Helloworld'
```

在input()函数中可以写入一串字符串

```
>>> a = input("请输入字符串:")
请输入字符串:helloworld
>>> a
'helloworld'
```

## 注释

### 单行注释符

井号(#)在python中用作为单行注释符，在代码中使用#后，右边的任何数据都会被忽略掉

```
a = 1 # 定义变量
```

### 多行注释符

多行注释符用三引号进行注释

```
'''
被注释了
'''

或者


"""
被注释了
"""
```

### 中文注释方法

在python编写代码的时候，避免不了会出现或是用到中文，这时候你需要在文件开头加上中文注释

```
#coding=utf-8
或者：
#coding=gbk
```

`在python3中，编码默认utf-8`

## 命名和保留字

### **应该避免的名称**

以下的命名应该尽量避免:

* 单字符名称, 除了计数器和迭代器

```
s = "hello world"
```

* 包/模块名中的连字符(-)

```
# 错误的包名
# 引用文件 html-parser.py
import html-parser

# 正确的写法
# 文件名应为 html_parser.py
import html_parser
```

* 双下划线开头并结尾的名称(Python保留, 例如\_\_init\_\_)
* 应避免使用小写字母l(L)，大写字母O(o)或I(i)单独作为一个变量的名称，以区分数字1和0
* 当参数名称和Python保留字冲突，可在最后添加一个下划线，而不是使用缩写或自造的词

```
# 如果变量名和python保留字冲突，则在末尾添加下划线
# 切记不要自己造词，或者使用缩写

str_ = "hello world!"
print_(str_)
```

### **命名约定**

* 模块
  * 模块尽量使用小写命名，首字母保持小写，尽量不要用下划线(除非多个单词，且数量不多的情况)
* 类名
  * 类名使用驼峰(CamelCase)命名风格，首字母大写，私有类可用一个下划线开头

```
class OurHome():
    pass
```

* 函数
  * 函数名一律小写，如有多个单词，用下划线隔开
  * 私有函数在函数前加一个下划线\_
* 变量
  * 变量名尽量小写, 如有多个单词，用下划线隔开
  * 常量采用全大写，如有多个单词，使用下划线隔开

### **保留字**

```
>>> import keyword
>>> keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', '
```

## 打包程序

### **安装**

```
pip install pyinstaller
```

### **检测是否安装成功**

```
pyinstaller --version
```

### **命令**

* pyinstaller : 打包可执行文件的主要命令，详细用法下面会介绍。
* pyi-archive\_viewer : 查看可执行包里面的文件列表。
* pyi-bindepend : 查看可执行文件依赖的动态库（.so或.dll文件）
* ...

### 安装

```
pyinstaller -F xx.py
```
