一、Python 的安装
众所周知,目前 Python 有两个分支,也即 Python2 与 Python3。尽管从版本号上看,后者是前者的更新版本,但可惜的是 Python3 不完全兼容 Python2。这就导致了众多使用 Python 的 Linux 系统中需要安装两套 Python 工具。在 MS Windows 中存在同样的问题,不过由于 MS Windows 系统本身不依赖于 Python,因此,安装哪个版本的 Python 取决于使用的 Python 应用程序的依赖关系了。如果作为全新的 Python 开发环境,安装哪个版本的 Python 都无所谓。
安装 Python2 与 Python3 的方法几乎是一样的。例如,要安装 Python2(当前版本是 2.7.10),先到它的官方网站 http://www.python.org 下载安装包
> wget --no-check-certificate https://www.python.org/ftp/python/2.7.10/python-2.7.10.amd64.msi
然后将它安装到 C:\Python27 目录。再如安装 Python3(当前版本是 3.5.0)完全类似,先到它的官方网站 http://www.python.org 下载安装包
> wget --no-check-certificate https://www.python.org/ftp/python/3.5.0/python-3.5.0.amd64.msi
然后将它安装到 C:\Python35 目录。请注意,为了防止 MS Windows 升级过程中影响 Python 的使用,一般不建议将 Python 安装到 MS Windows 系统的应用程序文件目录 %PROGRAMFILES% 中。这就是为什么将 Python 安装到磁盘根目录的原因。
Python 安装完毕之后,需要它们的可执行目录添加到 MS Windows 的 PATH 环境变量中。例如
> setx PATH "%PATH%;C:\Python27;C:\Python27\Scripts"
其中 C:\Python27 里存放的是 Python 解释器;而 C:\Python27\Scripts 则提供了很多工具。现在打开 CMD.EXE 窗口,试试下述命令查看 Python 版本以确认否正常工作
> python.exe -V
一切正常的话,可以进入 Python 解释器了
> python.exe >>>
其中 >>> 是 Python 解释器的提示符。里面可以运行 Python 命令,例如想获取 Python 模块 sys 的帮助,可执行
>>> help('sys')
一般而言,Python 内置模块的帮助文档的阅读器默认是 less,因此翻页、退出方法很简单,只需操作键盘上的方向键与 q 即可。退出 Python 解释器的方法是
>>> exit()
实际上,Python 的帮助文档也可直接在命令行或者 Web 界面中调用 pydoc,例如在 CMD.EXE 窗口中执行
> pydoc sys
若不知晓模块名,可按下述方式搜索关键字
> pydoc -k sys
或者启动用小型 Web 服务器,也即在 CMD.EXE 窗口中执行
> pydoc -p 8000
打开网页浏览器,访问 http://localhost:8000 即可查看文档。甚至可到 Python 的官方网页下载帮助文档 http://docs.python.org/download.html。另外,Python 命令也可以写到文件中,这样的文件称为 Python 脚本,一般以 .py 为扩展名。通常,在 Linux 系统中编写 Python 脚本,脚本文件的第一行比较特殊,例如
#!/bin/python
该行被称为 Shebang,它的作用是告诉 Linux 系统执行 Python 脚本所调用的 Python 解释器的版本。不过在 MS Windows 中,Shebang 是没有用处的。例如编写如下的 Python 脚本 test.py:
> notepad test.py print "Hello, Python World!"
保存后,运行它的方法是
> test.py
会根据环境变量 PATH 调用默认的 Python 解释器。当然也可指定 Python 解释器执行 Python 脚本
> C:\Python35\python.exe test.py
类似,可指定 Python 解释器执行 Python 模块,例如用 Python3 调用模块 pdb 调试 Python 脚本
> C:\Python35\python.exe -m pdb test.py
再如用 Python3 启动小型 Web 服务器
> C:\Python35\python.exe -m SimpleHTTPServer
可在本地网页浏览器中输入 http://127.0.0.1:8000 访问该 Web 服务。
以上介绍的是 Python 官方提供的安装套件。由于 Python 的使用场景众多、应用范围广泛,因此出现了很多非官方的 Python 定制套件。其中比较出名的有 Anaconda(https://www.continuum.io)、Enthought Canopy(https://www.enthought.com) 与 PythonXY(http://sourceforge.net/projects/python-xy),它们在科学计算领域中很有市场。这些 Python 工具的安装方法一如前述官方的 Python 安装方法,当然,这么多 Python 套件也为用户维护、切换它们带来烦恼。鉴于这样的原因,在 Linux 服务器系统或者 Mac OS X 中率先开发了 pyenv 工具来管理这些 Python 套件。作为 MS Windows 用户也不必担心,pywin 提供了类似 pyenv 的管理功能,可惜功能上没那么强大。
二、Python 模块/包管理工具的安装与使用
熟悉开源工具的朋友都知道,很多大型开源开发工具都有相应的开发包集散地与管理工具,例如 TeX 有 tlmgr(http://www.ctan.org,也即 CTAN)、Perl 有 cpan(http://www. cpan.org,也即 CPAN),Ruby 有 gem(http://rubygems.org),PHP 有 pear(http://pear.php.net)。幸运地是,Python 也拥有 pip(http://pypi.python.org,也即 PyPI)。Python 提供了两组工具使用 PyPI,也即 easy_install 与 pip,推荐使用 pip。不过,某些时候,easy_install 还是很有用的,这里也介绍了一下它的用法。另外,最新的 Python 版本一般都自带这两个工具,但是考虑到这两个工具的重要性,还是稍微了解一下这两个工具的安装方法。
1、easy_install 的安装与使用
easy_install 是由 PEAK(Python Enterprise Application Kit) 开发的 setuptools 包里带的一个命令行,所以使用 easy_install 实际上是在调用 setuptools 来完成安装模块的工作。引导 setuptools 的 ez_setup 工具和随之而生的扩展后的 easy_install 与 PyPI(Python Package Index)一起工作来实现相同的功能。它可以很方便的让您自动下载、编译、安装和管理 Python 包。
setuptools 可以在 http://pypi.python.org/pypi/setuptools 页面上找到 MS Windows 的安装方式,现在官网建议使用的是下载 ez_setup.py 来安装。
> wget http://peak.telecommunity.com/dist/ez_setup.py
或者
> wget --no-check-certificate https://bootstrap.pypi.io/ez_setup.py
下载完 ez_setup.py,在 CMD.EXE 窗口中切换到下载目录,使用命令行:
> python.exe ez_setup.py
该命令行会自动下载最新版本,之后会自动安装 setuptools。setuptools 安装完毕之后,在 C:\Python27\Scripts 下会有一个 easy_install.exe 可执行文件。有 setuptools 之后,剩下的就比较简单了。通常,easy_install 会将第三方 Python 模块安装到 C:\Python27\Lib\site-packages 目录中。
a、通过模块名称来安装。setuptools 会自动搜索 PyPI 以查找最新版本的模块。如果找到的话,它会自动下载、编译和安装。例如
> easy_install SQLObject > easy_install "python_dateutil==1.5" > easy_install "python_dateutil>=1.5"
通过 easy_install 安装 pip
> easy_install pip
b、指定查找页面来使用名称和版本信息来安装或升级一个模块:
> easy_install -f http://sqlobject.org/SQLObject > easy_install -U SQLObject
c、从指定 PyPI下载镜像地址来下载模块源码并在下载成功之后编译安装
> easy_install -i http://e.pypi.python.org/simple pip
d、在 easy_install 编译及安装 Python 包的过程中,需要使用 C/C++ 编译工具。在 MS Windows 操作系统中,同样需要事先安装 Visual Studio 或者 MingGW 等编译软件。PyPI 还提供了已经编译好的二进制文件 egg 给用户直接使用。如果用户直接使用 egg 的话,就无需在操作系统中准备编译器了。egg 是以平台相关的形式发布的,多数面向 MS Windows 用户。在理想情况中,egg 是一个使用 zip 压缩的文件,其中包括了所有需要的包文件。但是在某些情况下,setuptools 会决定(或被开关告知)包不应该是 zip 压缩的。在这些情况下,egg 只是一个简单的未曾压缩的子目录,但是里面的内容是相同的。使用单一的版本可以方便地进行转换,并可以节省一点磁盘空间,但是 egg 目录从功能和组织结构上来说都是相同的。为第三方 Python 模块发布 egg 文件非常简单,只需要在 Python 源码包的 setup.py 所在目录中执行
> python setup.py bdist_egg
在本地已经存在的 egg 文件基础上来安装模块
> easy_install D:\Downloads\OtherPackage-3.2.1-py2.3.egg
e、如果 PyPI 中某个已安装模块有最新版本,可升级到最新版本:
> easy_install --upgrade PyProtocols
f、从源码中安装模块(源码已经下载并解压到当前文件夹下)
> easy_install .
g、手工删除 Python 模块
如果想删除通过 easy_install 安装的软件包,由于 easy_install 本身没有卸载功能,需要手动分步完成。比如说卸载 MySQL-python,首先,可以执行命令:
> easy_install -mxm MySQL-python
此操作会从 C:\Python27\Lib\site-packages\easy-install.pth 文件里把 MySQL-python 的相关信息抹去;接着可以手动删除 MySQL-python 的 egg 文件或 MySQL-python 文件夹;最后,查找 C:\Python27\Scripts\ 目录并删除相关的可执行文件。
一般的 Python 第三方模块或包删除方法就是到 Python 的第三方模块或包的存放位置进行手工删除文件和文件夹,然后删除 C:\Python27\Lib\site-packages\easy-install.pth 文件中的相应的行。卸载 .egg 的方法类似,只需到 C:\Python27\Lib\site-packages 目录删除相应的 egg 文件或目录,接着在从 C:\Python27\Lib\site-packages\easy-install.pth 中删除相应的行。
2、pip 的安装与使用
pip 是 easy_install 的替代,可在 https://pypi.python.org/pypi/pip 找到 pip 的详细信息。pip 的安装需要 setuptools 或者 distribute 模块。distribute 是 setuptools 的替代( setuptools 包后期不再维护了)。若使用的是 Python3,那么只能使用 distribute 来安装了,因为 Python3 不再支持 setuptools 了。
利用 Python 的 setup.py 安装 pip,它默认会使用 setuptools 构建并导入 Python 模块
> wget --no-check-certificate https://pypi.python.org/packages/source/p/pip/pip-7.1.2.tar.gz#md5=3823d2343d9f3aaab21cf9c917710196 > tar -zxf pip-7.1.2.tar.gz > cd pip-7.1.2 > python setup.py install
利用 distribute_setup 安装 pip
> wget http://python-distribute.org/distribute_setup.py > wget --no-check-certificate https://bootstrap.pypi.io/get-pip.py > python distribute_setup.py > python get-pip.py
安装完成之后,在 C:\Python27\Scripts 下会有一个 pip.exe 可执行文件。有了 pip,Python 模块的安装就非常简单了。通常,pip 也会将第三方 Python 模块安装到 C:\Python27\Lib\site-packages 目录中,除非指定 --user 选项。关于该选项的介绍,请参看 https://docs.python.org/2/install/index.html#inst-alt-install-user。请注意,将 %APPDATA%\Python\Scripts 加入环境变量 PATH,也即
> setx PATH "%PATH%;%APPDATA%\Python\Scripts"
a、在 PyPi 中搜索并安装 Python 模块
> pip search "SomePackage" > pip install SomePackage
> pip install SomePackage==version
> pip install --pre SomePackage
b、pip 可以从指定的文件中读取需要安装的 Python 模块名
> echo Django > requirements.txt > pip install -r requirements.txt
c、还可为 pip 指定 Python 模块的源码包路径,包括源代码包的本地路径或者网络链接:
> pip install D:\Downloads\SomePackage-1.0.4.tar.gz > pip install http://my.package.repo/SomePackage-1.0.4.zip > pip install http://sourceforge.net/projects/pychecker/files/pychecker/0.8.19/pychecker-0.8.19.tar.gz/download
当然,这些包能够安装的前提是包内都已经写好了 setup.py。
d、可用下述命令查看本地所安装的 Python 模块的文件列表
> pip show --files SomePackage
另外,可通过下述方法列出所有通过 pip 安装的第三方 Python 模块
> pip list
还可以按需求将由 pip 所安装的第三方 Python 模块输出为 pip 命令能辨认的格式供 pip 使用
> pip freeze
e、若 PyPI 中有本地已安装 Python 模块的更新时,可利用下述命令更新它
> pip install --upgrade SomePackage > pip install --upgrade SomePackage==version > pip install --upgrade -r requirements.txt
可以利用下述方法列出所有的可更新的 Python 模块
> pip list --outdate
还可升级 pip 自身
> python -m pip install -U pip
f、pip 命令不建议使用 egg 文件。如果你想使用 egg 安装的话,请使用 easy_install 命令。不过 pip 支持 wheel 文件。wheel 本质上是一个 zip 包格式,它使用 .whl 扩展名,用于 python 模块的安装,它的出现是为了替代 Eggs。模块 wheel 还提供了一个 bdist_wheel 作为 setuptools 的扩展命令,它可以用来生成 wheel 包。为第三方 Python 模块发布 whell 文件非常简单,只需要在 Python 源码包的 setup.py 所在目录中执行
> python setup.py bdist_wheel
pip 也提供了一个 wheel 子命令来发布 wheel 包,当然,需要先安装 wheel 模块。同时,pip 可直接安装 wheel 文件,例如
> pip install beautifulsoup4-py2-none-any.whl
> pip install --no-binary :all: beautifulsoup
g、pip 比 easy_install 强大的地方之一是提供了卸载本地安装的第三方 Python 模块,例如
> pip uninstall SomePackage > pip uninstall -r requirements.txt
pip 还有许多有用的选项,如 --download-cache=DIR 可以指定下载安装文件时缓存至 DIR 路径,下次需要时则直接读取缓存文件;再如 -i 可用来指定 pip 的安装镜像。更多的选项信息可以执行
> pip --help > pip help install
除了命令行选项之外,还可通过环境变量设置 pip 的行为,例如 PIP_LOG_FILE、PIP_DOWNLOAD_CACHE、PIP_CONFIG_FILE。随后,还可以通过修改 pip 的配置文件来实现上述需求。在 MS Windows 下,pip 配置文件是 %HOMEPATH%\.pip\pip.conf,若在其中增加下述内容
> notepad.exe %HOMEPATH%\.pip\pip.conf [global] index-url = http://mirrors.aliyun.com/pypi/simple/
这样在使用 pip 来安装时,会默认使用此源。更多的配置请参考 http://pip.readthedocs.org/en/latest/user_guide.html#configuration。配置的优先级如下:
- 命令行选项 --host=foo 覆盖 PIP_HOST=foo;
- 环境变量 PIP_HOST=foo 覆盖 pip 配置文件中的 [global] 小节中的 host = foo;
- pip 配置文件中的命令 command 小节 [<command>] 中的 host = bar 覆盖配置文件中的 [global] 小节中的相应的配置。
作为使用 pip 的实例,下面来介绍一下 MS Windows 系统中 Python 套件管理工具 pywin 的安装以及使用方法。安装 pywin 之前需要首先确保安装了一套 Python 工具包,它是 pywin 正常工作的保障。pywin 的安装非常简单
> pip install --user pywin
首先初始化 pywin 环境
> pyassoc
搜索所有已安装的 Python 并在 pywin.bat 所在目录中创建相关启动文件
> pywin genlaunchers
若要启动现有 PATH 中的第一个 Python 套件,可执行
> pywin
若想在当前 CMD.EXE 窗口中启用 python 2.7,可执行
> pywin -2.7
若想将 Python 3.3 设置为默认的 Python 套件,可执行
> pywin setdefault 3.3
三、python 虚拟环境的创建与使用
Python 虚拟环境为 Python 模块的开发、测试提供了极大的便利,它可以有效的隔离无关模块。下面来介绍两个建立 Python 虚拟环境的典型方法。
1、利用 virtualenv 模块
安装 virtualenv:
> easy_install virtualenv==1.10.1
或者
> pip install virtualenv
安装完毕之后,同样在 C:\Python27\Scripts 下面可以看到 virtualenv.exe 文件。
安装完毕 virtualenv 之后,就可以创建虚拟环境了。先在 CMD.EXE 窗口中切换到需要创建虚拟环境的目录下,创建的虚拟环境是在该目录下的一个文件夹
> cd D:\some\directory\to\create\VirtualEnvs\ > virtualenv MyEnv
默认情况下,虚拟环境会依赖系统环境中的 site-packages,就是说系统中已经安装好的第三方 Python 包也会安装在虚拟环境 MyEnv 中。如果不想依赖这些 Python 包,那么可以加上参数 --system-site-packages 建立虚拟环境
> virtualenv --system-site-packages MyEnv
如果系统中安装有多个 Python 版本,要想使用指定版本的 Python 来创建虚拟环境,可执行
> virtualenv --python=C:\Python35\python.exe MyEnv
创建之后,可以检查一下 MyEnv 目录中是否有文件生成,同时确认一下 MyEnv\Scripts\ 目录中是否有 activate.bat 和 deactivate.bat 两个文件。至此,虚拟环境 MyEnv 就创建好了。运行虚拟环境只需要在 CMD.EXE 窗口中下执行
> cd D:\some\directory\to\create\VirtualEnvs\ > MyEnv\Scripts\activate.bat
虚拟环境 MyEnv 启动后,会在 CMD.EXE 窗口的提示符前多出一个 (MyEnv),在该 CMD.EXE 窗口中进行的所有操作均在虚拟环境 MyEnv 中,例如下述命令
(MyEnv)> pip install Pelican
会将 Python 模块 Pelican 安装到虚拟环境 MyEnv 所在目录 D:\some\directory\to\create\VirtualEnvs\MyEnv 中,而不是 Python 套件所在目录 C:\Python27 中。退出虚拟环境只需要在该 CMD.EXE 窗口中运行
(MyEnv)> deactivate.bat
简单说明一下与 virtualenv 相关的环境变量 VIRTUALENV_USE_ DISTRIBUTE。VIRTUALENV_USE_DISTRIBUTE 是向 Python 模块 distribute 指明 Python 运行信息的环境变量。如果在开发过程中,希望所开发的 Python 应用程序有“不兼容旧版本的 Python”或者“兼容最新版本 Python”的要求,最好对该环境变量进行设定。为了不在每次登录都输入这样的命令,可在 MS Windows 中设置环境变量,例如
> setx VIRTUALENV_USE_DISTRIBUTE=true
模块 distribute 会根据这个环境变量是否存在,判断虚拟运行环境的配置有效或无效。因此在不使用模块 distribute 的时候,建议取消该环境变量。
2、利用 virtualenvwrapper-win 模块
当然更好的虚拟环境封装是安装下述 Python 模块
> pip install virtualenvwrapper-win
并设置环境变量 WORKON_HOME 为虚拟环境的工作目录
> setx WORKON_HOME "%USERPROFILE%\Virtualenvs"
a、创建虚拟环境,例如下述命令行会创建一个名为 MyEnv 的虚拟环境
> mkvirtualenv MyEnv
使用指定版本的 Python 来创建虚拟环境,例如
> mkvirtualenv --python=C:\Python35\python.exe MyEnv
实际上,virtualenvwrapper 提供了更多的定制变量,例如 VIRTUALENVWRAPPER_PYTHON、VIRTUALENVWRAPPER_VIRTUALENV 以及 VIRTUALENVWRAPPER_VIRTUALENV_ARGS 等。
b、列出所有虚拟环境
> lsvirtualenv
切换到虚拟环境,例如
> workon MyEnv
此时在 CMD.EXE 窗口的提示符前多出一个 (MyEnv)。此时可进入虚拟环境的所在目录,例如
(MyEnv)> cdvirtualenv
根据环境变量 WORKON_HOME 的设定,会将目录切换到 %USERPROFILE%\Virtualenvs\MyEnv。
c、在虚拟环境中的创建工程,例如在 SomeEnv 虚拟环境中创建名为 ProInSomeEnv 的工程
(MyEnv)> mkproject ProInSomeEnv
进入虚拟环境中的工程目录,例如
(MyEnv)> cdproject ProInSomeEnv
退出当前虚拟环境
(MyEnv)> deactivate
d、移除虚拟环境,例如
> rmvirtualenv MyEnv
3、虚拟环境的迁移
当需要将虚拟环境 MyEnv 迁移或复制到另一个虚拟环境(可能不在同一台机器上)YourEnv 时,首先仍然需要在目的机器上安装 pip 和 virtualenv(或者 virtualenvwrapper-win),然后采用以下方法之一安装其他的 Python 模块。
a、直接将 MyEnv 里的文件全部复制到 YourEnv 里,然后修改涉及路径的文件。此种方法可能正常使用,但显然不是好办法。
b、进入原虚拟环境 MyEnv,然后执行
(MyEnv)> pip freeze > requirements.txt
将包依赖信息保存在 requirements.txt 文件中。然后进入目的虚拟环境 YourEnv,执行
(MyEnv)> pip install -r requirements.txt
pip 就会自动从网上下载并安装所有包。
c、pip 默认会从 PyPI 服务器(http://pypi.python.org/simple)下载包的安装文件,如果目的机器无法连外网,则可以采用以下办法:
c1、搭建自己的 PyPI 服务器。专业的,可以使用第三方的软件包来搭建一个完整的 PyPI 镜像服务器。更快速的方法只需要一条命令
> python -m SimpleHTTPServer
即可完成搭建服务器,具体的目录结构可参考原 PyPI 服务器,简而言之,就是把安装文件打包放入目录即可。搭建好服务器之后,在目的虚拟环境中,就可以使用 pip 来安装了,命令如:
(YourEnv)> pip install -i http://127.0.0.1:8000/ -r requirements.txt
c2、若不想搭建 PyPI 服务器,也有办法。首先将所有包的安装文件下载到本地目录中,可以手动下载,也可以使用 pip,例如
(MyEnv)> pip install -d D:\Downloads -r requirements.txt
然后将 D:\Downloads 中缓存的所有 Python 包以及 requirements.txt 文件复制到目标主机中,再在目的虚拟环境中使用 pip 安装,例如所有缓存的 Python 包也被复制到 D:\Downloads 中,则
(YourEnv)> pip install -d D:\Downloads -r requirements.txt
即可。
c3、还有一种途径,就是 pip 提供的 bundle 选项。首先执行
(MyEnv)> pip bundle MyEnv.pybundle -r requirements.txt
将生成一个 MyEnv.pybundle 文件,该文件夹包含所有包的安装文件(注意必须后缀名必须是 .pybundle),默认是重新从 PyPI 服务器下载安装文件的,如果愿意,也可以利用 c1 中的方法,指定本地的 PyPI 服务器。然后在目的虚拟环境中执行
(YourEnv)> pip install MyEnv.pybundle
即可。
四、图形用户界面相关的 Python 工具
> notepad.exe hellopygtk.py from gtk import * window = GtkWindow(WINDOW_TOPLEVEL) # 创建一个顶层窗口 window.set_title("Hello, world!") window.connect("destroy", mainquit) # 将注销事件与mainquit处理连接 window.show() # 显示主窗口 mainloop() # 进入事件循环 > python hellopygtk.py
> notepad.exe hellopyqt.py import sys from PyQt5 import QtWidgets, QtCore app = QtWidgets.QApplication(sys.argv) widget = QtWidgets.QWidget() widget.resize(360, 360) widget.setWindowTitle("Hello, PyQt5!") widget.show() sys.exit(app.exec_()) > python hellopyqt.py
> notepad.exe hellowxpy.py import sys, os from wxPython.wx import * class main_window(wxFrame): def __init__(self, parent, id, title): wxFrame.__init__(self, parent, -1, title, size = (200, 100),style=wxDEFAULT_FRAME_STYLE|wxNO_FULL_REPAINT_ON_RESIZE) self.control = wxTextCtrl(self, -1, style=wxTE_MULTILINE) self.Show(true) class App(wxApp): def OnInit(self): frame = main_window(None, -1, "wxPython: (A Demonstration)") self.SetTopWindow(frame) return true app = App() app.MainLoop() > python hellowxpy.py
> pip install ipython jupyter
> pip install spyder
> pip install numpy
> pip install scipy
> pip install sympy
> pip install matplotlib
> pip install pandas
> pip install chaco
> pip install Cython
> pip install ipdb logging
若对用 Python 处理计算流体的问题有兴趣,不妨仔细阅读 https://github.com/barbagroup/CFDPython 中的课程。