> For the complete documentation index, see [llms.txt](https://hq-1.gitbook.io/python/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hq-1.gitbook.io/python/master.md).

# 第一章 起步

## 概要 <a href="#gai-yao" id="gai-yao"></a>

本章主要提到 python 安装和运行 python 的最基本方法。作为初学者的第一本编程书，作者写的非常简略，但对于更复杂的数据分析实战，这两方面都有需要补充说明。

## Python 3 而不是 Python 2 <a href="#python-3-er-bu-shi-python-2" id="python-3-er-bu-shi-python-2"></a>

Python 过去的一大痛点就是有两个互不兼容的大版本（2 和 3），使初学者十分疑惑。这个问题在今天（2020）已经不存在了。Python 2 已经正式成为历史，不要管它，一切有关 python 的东西，都应该使用python 3。除此之外，你可以知道的一个关于 python 2 和 3 的最大不同 —— print 的不同，这会方便你看一些老的资料：

```
python2: print "Hello World!"
python3: print("Hello World!")
```

## Python 安装 <a href="#python-an-zhuang" id="python-an-zhuang"></a>

入门书一般会推荐最基本的 python 安装，或者直接使用 linux / macos 系统自带的 python。这是因为入门书基本不需要使用太多**第三方包**（如 pandas），不需要**严格管理包的版本以保证结果的可重复性以及包与包之间的互相兼容性**。因此也就不需要提及其他的 python 安装方法。但实际上，在真正的数据处理实战中，上述需求的存在使得安装成为一个比较容易出问题的环节。

在 genome book 中，我使用了一个[专门的章节](https://hq-1.gitbook.io/essential-python-for-genome-science/work-environment/conda-and-pip)强调了规范安装的重要性。在这里再次罗列一下实际用于工作环境的安装步骤和入门的安装步骤的三个重要区别：

1. 不要使用系统自带的 python，而要使用 python 的包管理器 conda （anaconda 或者 miniconda）来安装和管理 python。通过 shell 的 which 语句来查看你是否用的是正确的 python 路径。
2. conda 除了能够管理 python 的包，其中的 bioconda channel 还能够安装几乎所有其他语言写的常用 bioinformatic softwares！
3. 使用 conda environment 管理 python 安装。最好的实践是，给每一个独立的项目都建立一个独立的 environment，单独重复安装所有需要的包。

{% hint style="info" %}
为什么要用 conda environment？

Python 有一个特点，就是同一个名字的包，**只能安装一个版本**。因为在 import 语句中，只能按名字 import，无法指定包的版本

但有的时候，不同版本的包（尤其是一些不够成熟，但对某些分析问题又是必须的包）之间会出现各种兼容性问题，如果不使用独立 environment ，可能会出现一个项目需要安装或升级某个包，但之后造成另一个项目之前的代码无法运行的窘境。
{% endhint %}

## Python 运行方法 <a href="#python-yun-hang-fang-fa" id="python-yun-hang-fang-fa"></a>

和安装一样，作者在这里也只介绍了使用 python 的两种最最基本的方式：

1. 从命令行启动 python 后直接在python shell 中执行 python 代码
2. 运行某个编写好的 python 代码文件

当然，这两种方式（尤其是第二种）确实也是你会**间接**用到的方法。对于数据分析来说，我们有更好的工具来高效的编写和运行 python，那就是使用 Jupyter Notebook。[这三种方法在 genome book 中都有提到](https://hq-1.gitbook.io/essential-python-for-genome-science/python-and-unix-system/python-interpreter)。Jupyter Notebook 学习成本很低，简单搜索 “jupyter notebook 入门” 就能找到不错的说明，这里就不再重复了。

{% hint style="info" %}
在 genome book 中，我简单解释了一下 Jupyter Notebook 的[具体运行机制](https://github.com/lhqing/py_genome_sci_book/blob/master/analysis/python_basic/explor_jupyter_notebook_environment.ipynb)。这会有助于你理解你在 jupyter notebook 中写 python 代码的时候，其背后到底发生了什么。但这不是简单使用 Jupyter Notebook 所必需的。
{% endhint %}

### Python 解释器 <a href="#python-jie-shi-qi" id="python-jie-shi-qi"></a>

在 genome book 中，我进一步解释了 [**python 解释器 （interpreter）**&#x8FD9;个概念](https://hq-1.gitbook.io/essential-python-for-genome-science/python-and-unix-system/python-interpreter#understand-the-python-language)。对于初学者来说，你可以简单理解成，python 解释器是系统下的一个多功能“软件”，它的功能多到可以做几乎任何事情，包括对系统进行复杂控制。但是，它也因此复杂到需要一门专门的编程语言 —— python 来描述它需要做的事情。不管你用哪种方法运行 python，你的 python 代码最终都是在指导 python 解释器这个软件做你让它做的事情。

## 漫谈 <a href="#man-tan" id="man-tan"></a>

我觉得学编程就像习武，初学的时候，只会学习基本招式（python 基本语法），然后做简单的套路（实现目标单一的小程序）；待到进阶时，则会学习更加复杂的招式（python 的高级语法，那些复杂的第三方包，乃至自己写包），高深的套路（实现高度自动化和充分考虑各种情况的 pipeline）。但与此同时，内功（python 语法的背后机制，乃至 python 语言的实现机制）也极为重要，因为内功的修炼才会使得对招式的理解大大加深，并且做到一通百通（这是 python 最令人喜欢的地方，当你充分熟悉他的原理时，学习新的包和代码变得很容易）。最后，内功精进才会让你成为真正的高手（能够从源码理解 python）。

当然，现实一些来说，我们并不需要成为高手才能行走江湖（进行数据分析实践），因为可以雇一个镖师护送（大多数问题都有现成的解决方案）。但如果喜欢习武（做码农）的话，这个精进的过程还是令人非常有成就感的。
