| @@ -0,0 +1,14 @@ | |||||
| ## Notebooks: | |||||
| machineLearning/10_digits_classification.ipynb | |||||
| MachineLearningNotebooks/05.%20Logistic%20Regression.ipynb | |||||
| MachineLearningNotebooks/08.%20Practical_NeuralNets.ipynb | |||||
| ## Exercise | |||||
| http://sofasofa.io/competitions.php?type=practice | |||||
| https://www.kaggle.com/competitions | |||||
| https://github.com/wmpscc/DataMiningNotesAndPractice/blob/master/2.KMeans%E7%AE%97%E6%B3%95%E4%B8%8E%E4%BA%A4%E9%80%9A%E4%BA%8B%E6%95%85%E7%90%86%E8%B5%94%E5%AE%A1%E6%A0%B8%E9%A2%84%E6%B5%8B.md | |||||
| @@ -34,10 +34,15 @@ | |||||
| "* 高于 100 万元时, 超过 100 万元的部分按 1%提成, \n", | "* 高于 100 万元时, 超过 100 万元的部分按 1%提成, \n", | ||||
| "从键盘输入当月利润 I,求应发放奖金总数?\n", | "从键盘输入当月利润 I,求应发放奖金总数?\n", | ||||
| "\n", | "\n", | ||||
| "\n", | |||||
| "### (4)循环\n", | "### (4)循环\n", | ||||
| "输出9x9的乘法口诀表\n", | "输出9x9的乘法口诀表\n", | ||||
| "\n", | "\n", | ||||
| "### (5)算法\n", | |||||
| "\n", | |||||
| "### (5)使用while循环实现输出2-3+4-5+6.....+100的和\n", | |||||
| "\n", | |||||
| "\n", | |||||
| "### (6)算法\n", | |||||
| "给一个数字列表,将其按照由大到小的顺序排列\n", | "给一个数字列表,将其按照由大到小的顺序排列\n", | ||||
| "\n", | "\n", | ||||
| "例如\n", | "例如\n", | ||||
| @@ -45,72 +50,19 @@ | |||||
| "1, 10, 4, 2, 9, 2, 34, 5, 9, 8, 5, 0\n", | "1, 10, 4, 2, 9, 2, 34, 5, 9, 8, 5, 0\n", | ||||
| "```\n", | "```\n", | ||||
| "\n", | "\n", | ||||
| "### (6)应用1\n", | |||||
| "### (7)应用1\n", | |||||
| "做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)?\n", | "做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)?\n", | ||||
| "\n", | "\n", | ||||
| "需要考虑什么是激活码?有什么特性?例如`KR603guyVvR`是一个激活码\n", | "需要考虑什么是激活码?有什么特性?例如`KR603guyVvR`是一个激活码\n", | ||||
| "\n", | "\n", | ||||
| "### (7)应用2\n", | |||||
| "### (8)应用2\n", | |||||
| "需要把某个目录下面所有的某种类型的文件找到。\n", | "需要把某个目录下面所有的某种类型的文件找到。\n", | ||||
| "例如把`c:`下面所有的`.dll`文件找到\n", | "例如把`c:`下面所有的`.dll`文件找到\n", | ||||
| "\n", | "\n", | ||||
| "### (8)应用3\n", | |||||
| "### (9)应用3\n", | |||||
| "你有个目录,里面是程序(假如是C或者是Python),统计一下你写过多少行代码。包括空行和注释,但是要分别列出来。\n", | "你有个目录,里面是程序(假如是C或者是Python),统计一下你写过多少行代码。包括空行和注释,但是要分别列出来。\n", | ||||
| "\n" | "\n" | ||||
| ] | ] | ||||
| }, | |||||
| { | |||||
| "cell_type": "markdown", | |||||
| "metadata": {}, | |||||
| "source": [ | |||||
| "## 数值计算\n", | |||||
| "\n", | |||||
| "\n", | |||||
| "### (1)对于一个存在在数组,如何添加一个用0填充的边界?\n", | |||||
| "例如对一个二维矩阵\n", | |||||
| "```\n", | |||||
| "10, 34, 54, 23\n", | |||||
| "31, 87, 53, 68\n", | |||||
| "98, 49, 25, 11\n", | |||||
| "84, 32, 67, 88\n", | |||||
| "```\n", | |||||
| "\n", | |||||
| "变换成\n", | |||||
| "```\n", | |||||
| " 0, 0, 0, 0, 0, 0\n", | |||||
| " 0, 10, 34, 54, 23, 0\n", | |||||
| " 0, 31, 87, 53, 68, 0\n", | |||||
| " 0, 98, 49, 25, 11, 0\n", | |||||
| " 0, 84, 32, 67, 88, 0\n", | |||||
| " 0, 0, 0, 0, 0, 0\n", | |||||
| "```\n", | |||||
| "\n", | |||||
| "### (2) 创建一个 5x5的矩阵,并设置值1,2,3,4落在其对角线下方位置\n", | |||||
| "\n", | |||||
| "\n", | |||||
| "### (3) 创建一个8x8 的矩阵,并且设置成棋盘样式\n", | |||||
| "\n", | |||||
| "\n", | |||||
| "### (4)求解线性方程组\n", | |||||
| "\n", | |||||
| "给定一个方程组,如何求出其的方程解。有多种方法,分析各种方法的优缺点(最简单的方式是消元方)。\n", | |||||
| "\n", | |||||
| "例如\n", | |||||
| "```\n", | |||||
| "3x + 4y + 2z = 10\n", | |||||
| "5x + 3y + 4z = 14\n", | |||||
| "8x + 2y + 7z = 20\n", | |||||
| "```\n", | |||||
| "\n", | |||||
| "编程写出求解的程序\n" | |||||
| ] | |||||
| }, | |||||
| { | |||||
| "cell_type": "code", | |||||
| "execution_count": null, | |||||
| "metadata": {}, | |||||
| "outputs": [], | |||||
| "source": [] | |||||
| } | } | ||||
| ], | ], | ||||
| "metadata": { | "metadata": { | ||||
| @@ -0,0 +1,74 @@ | |||||
| # -*- coding: utf-8 -*- | |||||
| # --- | |||||
| # jupyter: | |||||
| # jupytext_format_version: '1.2' | |||||
| # kernelspec: | |||||
| # display_name: Python 3 | |||||
| # language: python | |||||
| # name: python3 | |||||
| # language_info: | |||||
| # codemirror_mode: | |||||
| # name: ipython | |||||
| # version: 3 | |||||
| # file_extension: .py | |||||
| # mimetype: text/x-python | |||||
| # name: python | |||||
| # nbconvert_exporter: python | |||||
| # pygments_lexer: ipython3 | |||||
| # version: 3.5.2 | |||||
| # --- | |||||
| # # Python & Machine Learning Exercises | |||||
| # ## Python | |||||
| # | |||||
| # ### (1)字符串 | |||||
| # 给定一个文章,找出每个单词的出现次数 | |||||
| # | |||||
| # ``` | |||||
| # One is always on a strange road, watching strange scenery and listening to strange music. Then one day, you will find that the things you try hard to forget are already gone. | |||||
| # ``` | |||||
| # | |||||
| # ### (2)组合 | |||||
| # 有 1、2、3、4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? | |||||
| # | |||||
| # | |||||
| # ### (3) 判断 | |||||
| # 企业发放的奖金根据利润提成。利润(I): | |||||
| # * 低于或等于 10 万元时,奖金可提 10%; | |||||
| # * 高于 10 万元,低于 20 万元时,低于 10 万元的部分按 10%提成,高于 10 万元的部分,可提成 7.5%; | |||||
| # * 20 万到 40 万之间时,高于 20 万元的部分,可提成 5%; | |||||
| # * 40 万到 60 万之间时,高于 40 万元的部分,可提成 3%; | |||||
| # * 60 万到 100 万之间时,高于 60 万元的部分,可提成 1.5%, | |||||
| # * 高于 100 万元时, 超过 100 万元的部分按 1%提成, | |||||
| # 从键盘输入当月利润 I,求应发放奖金总数? | |||||
| # | |||||
| # | |||||
| # ### (4)循环 | |||||
| # 输出9x9的乘法口诀表 | |||||
| # | |||||
| # | |||||
| # ### (5)使用while循环实现输出2-3+4-5+6.....+100的和 | |||||
| # | |||||
| # | |||||
| # ### (6)算法 | |||||
| # 给一个数字列表,将其按照由大到小的顺序排列 | |||||
| # | |||||
| # 例如 | |||||
| # ``` | |||||
| # 1, 10, 4, 2, 9, 2, 34, 5, 9, 8, 5, 0 | |||||
| # ``` | |||||
| # | |||||
| # ### (7)应用1 | |||||
| # 做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)? | |||||
| # | |||||
| # 需要考虑什么是激活码?有什么特性?例如`KR603guyVvR`是一个激活码 | |||||
| # | |||||
| # ### (8)应用2 | |||||
| # 需要把某个目录下面所有的某种类型的文件找到。 | |||||
| # 例如把`c:`下面所有的`.dll`文件找到 | |||||
| # | |||||
| # ### (9)应用3 | |||||
| # 你有个目录,里面是程序(假如是C或者是Python),统计一下你写过多少行代码。包括空行和注释,但是要分别列出来。 | |||||
| # | |||||
| # | |||||
| @@ -0,0 +1,82 @@ | |||||
| { | |||||
| "cells": [ | |||||
| { | |||||
| "cell_type": "markdown", | |||||
| "metadata": {}, | |||||
| "source": [ | |||||
| "## 数值计算\n", | |||||
| "\n", | |||||
| "\n", | |||||
| "### (1)对于一个存在在数组,如何添加一个用0填充的边界?\n", | |||||
| "例如对一个二维矩阵\n", | |||||
| "```\n", | |||||
| "10, 34, 54, 23\n", | |||||
| "31, 87, 53, 68\n", | |||||
| "98, 49, 25, 11\n", | |||||
| "84, 32, 67, 88\n", | |||||
| "```\n", | |||||
| "\n", | |||||
| "变换成\n", | |||||
| "```\n", | |||||
| " 0, 0, 0, 0, 0, 0\n", | |||||
| " 0, 10, 34, 54, 23, 0\n", | |||||
| " 0, 31, 87, 53, 68, 0\n", | |||||
| " 0, 98, 49, 25, 11, 0\n", | |||||
| " 0, 84, 32, 67, 88, 0\n", | |||||
| " 0, 0, 0, 0, 0, 0\n", | |||||
| "```\n", | |||||
| "\n", | |||||
| "### (2) 创建一个 5x5的矩阵,并设置值1,2,3,4落在其对角线下方位置\n", | |||||
| "\n", | |||||
| "\n", | |||||
| "### (3) 创建一个8x8 的矩阵,并且设置成国际象棋棋盘样式(黑可以用0, 白可以用1)\n", | |||||
| "\n", | |||||
| "\n", | |||||
| "### (4)求解线性方程组\n", | |||||
| "\n", | |||||
| "给定一个方程组,如何求出其的方程解。有多种方法,分析各种方法的优缺点(最简单的方式是消元方)。\n", | |||||
| "\n", | |||||
| "例如\n", | |||||
| "```\n", | |||||
| "3x + 4y + 2z = 10\n", | |||||
| "5x + 3y + 4z = 14\n", | |||||
| "8x + 2y + 7z = 20\n", | |||||
| "```\n", | |||||
| "\n", | |||||
| "编程写出求解的程序\n", | |||||
| "\n", | |||||
| "\n", | |||||
| "### (5) 翻转一个数组(第一个元素变成最后一个)\n", | |||||
| "\n", | |||||
| "\n", | |||||
| "### (6) 产生一个十乘十随机数组,并且找出最大和最小值\n", | |||||
| "\n", | |||||
| "\n", | |||||
| "## Reference\n", | |||||
| "* [100 numpy exercises](https://github.com/rougier/numpy-100)" | |||||
| ] | |||||
| } | |||||
| ], | |||||
| "metadata": { | |||||
| "kernelspec": { | |||||
| "display_name": "Python 3", | |||||
| "language": "python", | |||||
| "name": "python3" | |||||
| }, | |||||
| "language_info": { | |||||
| "codemirror_mode": { | |||||
| "name": "ipython", | |||||
| "version": 3 | |||||
| }, | |||||
| "file_extension": ".py", | |||||
| "mimetype": "text/x-python", | |||||
| "name": "python", | |||||
| "nbconvert_exporter": "python", | |||||
| "pygments_lexer": "ipython3", | |||||
| "version": "3.5.2" | |||||
| }, | |||||
| "main_language": "python" | |||||
| }, | |||||
| "nbformat": 4, | |||||
| "nbformat_minor": 2 | |||||
| } | |||||
| @@ -0,0 +1,70 @@ | |||||
| # -*- coding: utf-8 -*- | |||||
| # --- | |||||
| # jupyter: | |||||
| # jupytext_format_version: '1.2' | |||||
| # kernelspec: | |||||
| # display_name: Python 3 | |||||
| # language: python | |||||
| # name: python3 | |||||
| # language_info: | |||||
| # codemirror_mode: | |||||
| # name: ipython | |||||
| # version: 3 | |||||
| # file_extension: .py | |||||
| # mimetype: text/x-python | |||||
| # name: python | |||||
| # nbconvert_exporter: python | |||||
| # pygments_lexer: ipython3 | |||||
| # version: 3.5.2 | |||||
| # --- | |||||
| # ## 数值计算 | |||||
| # | |||||
| # | |||||
| # ### (1)对于一个存在在数组,如何添加一个用0填充的边界? | |||||
| # 例如对一个二维矩阵 | |||||
| # ``` | |||||
| # 10, 34, 54, 23 | |||||
| # 31, 87, 53, 68 | |||||
| # 98, 49, 25, 11 | |||||
| # 84, 32, 67, 88 | |||||
| # ``` | |||||
| # | |||||
| # 变换成 | |||||
| # ``` | |||||
| # 0, 0, 0, 0, 0, 0 | |||||
| # 0, 10, 34, 54, 23, 0 | |||||
| # 0, 31, 87, 53, 68, 0 | |||||
| # 0, 98, 49, 25, 11, 0 | |||||
| # 0, 84, 32, 67, 88, 0 | |||||
| # 0, 0, 0, 0, 0, 0 | |||||
| # ``` | |||||
| # | |||||
| # ### (2) 创建一个 5x5的矩阵,并设置值1,2,3,4落在其对角线下方位置 | |||||
| # | |||||
| # | |||||
| # ### (3) 创建一个8x8 的矩阵,并且设置成国际象棋棋盘样式(黑可以用0, 白可以用1) | |||||
| # | |||||
| # | |||||
| # ### (4)求解线性方程组 | |||||
| # | |||||
| # 给定一个方程组,如何求出其的方程解。有多种方法,分析各种方法的优缺点(最简单的方式是消元方)。 | |||||
| # | |||||
| # 例如 | |||||
| # ``` | |||||
| # 3x + 4y + 2z = 10 | |||||
| # 5x + 3y + 4z = 14 | |||||
| # 8x + 2y + 7z = 20 | |||||
| # ``` | |||||
| # | |||||
| # 编程写出求解的程序 | |||||
| # | |||||
| # | |||||
| # ### (5) 翻转一个数组(第一个元素变成最后一个) | |||||
| # | |||||
| # | |||||
| # ### (6) 产生一个十乘十随机数组,并且找出最大和最小值 | |||||
| # | |||||
| # | |||||
| # ## Reference | |||||
| # * [100 numpy exercises](https://github.com/rougier/numpy-100) | |||||
| @@ -0,0 +1,37 @@ | |||||
| { | |||||
| "cells": [ | |||||
| { | |||||
| "cell_type": "markdown", | |||||
| "metadata": {}, | |||||
| "source": [ | |||||
| "# Matplotlib\n", | |||||
| "\n", | |||||
| "\n", | |||||
| "## (1) 画出一个二次函数,同时画出梯形法求积分时的各个梯形\n", | |||||
| "\n" | |||||
| ] | |||||
| } | |||||
| ], | |||||
| "metadata": { | |||||
| "kernelspec": { | |||||
| "display_name": "Python 3", | |||||
| "language": "python", | |||||
| "name": "python3" | |||||
| }, | |||||
| "language_info": { | |||||
| "codemirror_mode": { | |||||
| "name": "ipython", | |||||
| "version": 3 | |||||
| }, | |||||
| "file_extension": ".py", | |||||
| "mimetype": "text/x-python", | |||||
| "name": "python", | |||||
| "nbconvert_exporter": "python", | |||||
| "pygments_lexer": "ipython3", | |||||
| "version": "3.5.2" | |||||
| }, | |||||
| "main_language": "python" | |||||
| }, | |||||
| "nbformat": 4, | |||||
| "nbformat_minor": 2 | |||||
| } | |||||
| @@ -0,0 +1,26 @@ | |||||
| # -*- coding: utf-8 -*- | |||||
| # --- | |||||
| # jupyter: | |||||
| # jupytext_format_version: '1.2' | |||||
| # kernelspec: | |||||
| # display_name: Python 3 | |||||
| # language: python | |||||
| # name: python3 | |||||
| # language_info: | |||||
| # codemirror_mode: | |||||
| # name: ipython | |||||
| # version: 3 | |||||
| # file_extension: .py | |||||
| # mimetype: text/x-python | |||||
| # name: python | |||||
| # nbconvert_exporter: python | |||||
| # pygments_lexer: ipython3 | |||||
| # version: 3.5.2 | |||||
| # --- | |||||
| # # Matplotlib | |||||
| # | |||||
| # | |||||
| # ## (1) 画出一个二次函数,同时画出梯形法求积分时的各个梯形 | |||||
| # | |||||
| # | |||||
| @@ -1,82 +0,0 @@ | |||||
| { | |||||
| "cells": [ | |||||
| { | |||||
| "cell_type": "markdown", | |||||
| "metadata": {}, | |||||
| "source": [ | |||||
| "# Digitial Classification\n", | |||||
| "\n", | |||||
| "\n" | |||||
| ] | |||||
| }, | |||||
| { | |||||
| "cell_type": "code", | |||||
| "execution_count": 1, | |||||
| "metadata": {}, | |||||
| "outputs": [ | |||||
| { | |||||
| "name": "stdout", | |||||
| "output_type": "stream", | |||||
| "text": [ | |||||
| "Automatically created module for IPython interactive environment\n", | |||||
| "KNN score: 0.953661\n", | |||||
| "LogisticRegression score: 0.908248\n" | |||||
| ] | |||||
| } | |||||
| ], | |||||
| "source": [ | |||||
| "print(__doc__)\n", | |||||
| "\n", | |||||
| "from sklearn import datasets, neighbors, linear_model\n", | |||||
| "\n", | |||||
| "digits = datasets.load_digits()\n", | |||||
| "X_digits = digits.data\n", | |||||
| "y_digits = digits.target\n", | |||||
| "\n", | |||||
| "n_samples = len(X_digits)\n", | |||||
| "n_train = int(0.4 * n_samples)\n", | |||||
| "\n", | |||||
| "X_train = X_digits[:n_train]\n", | |||||
| "y_train = y_digits[:n_train]\n", | |||||
| "X_test = X_digits[n_train:]\n", | |||||
| "y_test = y_digits[n_train:]\n", | |||||
| "\n", | |||||
| "knn = neighbors.KNeighborsClassifier()\n", | |||||
| "logistic = linear_model.LogisticRegression()\n", | |||||
| "\n", | |||||
| "print('KNN score: %f' % knn.fit(X_train, y_train).score(X_test, y_test))\n", | |||||
| "print('LogisticRegression score: %f' % logistic.fit(X_train, y_train).score(X_test, y_test))" | |||||
| ] | |||||
| }, | |||||
| { | |||||
| "cell_type": "markdown", | |||||
| "metadata": {}, | |||||
| "source": [ | |||||
| "## References\n", | |||||
| "* [Supervised learning: predicting an output variable from high-dimensional observations](http://scikit-learn.org/stable/tutorial/statistical_inference/supervised_learning.html)\n", | |||||
| "* [Digits Classification Exercise](http://scikit-learn.org/stable/auto_examples/exercises/plot_digits_classification_exercise.html)\n" | |||||
| ] | |||||
| } | |||||
| ], | |||||
| "metadata": { | |||||
| "kernelspec": { | |||||
| "display_name": "Python 3", | |||||
| "language": "python", | |||||
| "name": "python3" | |||||
| }, | |||||
| "language_info": { | |||||
| "codemirror_mode": { | |||||
| "name": "ipython", | |||||
| "version": 3 | |||||
| }, | |||||
| "file_extension": ".py", | |||||
| "mimetype": "text/x-python", | |||||
| "name": "python", | |||||
| "nbconvert_exporter": "python", | |||||
| "pygments_lexer": "ipython3", | |||||
| "version": "3.5.2" | |||||
| } | |||||
| }, | |||||
| "nbformat": 4, | |||||
| "nbformat_minor": 2 | |||||
| } | |||||
| @@ -0,0 +1,73 @@ | |||||
| # --- | |||||
| # jupyter: | |||||
| # jupytext_format_version: '1.2' | |||||
| # kernelspec: | |||||
| # display_name: Python 3 | |||||
| # language: python | |||||
| # name: python3 | |||||
| # language_info: | |||||
| # codemirror_mode: | |||||
| # name: ipython | |||||
| # version: 3 | |||||
| # file_extension: .py | |||||
| # mimetype: text/x-python | |||||
| # name: python | |||||
| # nbconvert_exporter: python | |||||
| # pygments_lexer: ipython3 | |||||
| # version: 3.5.2 | |||||
| # --- | |||||
| # # KNN Classification | |||||
| # | |||||
| # | |||||
| # | |||||
| # + | |||||
| % matplotlib inline | |||||
| import matplotlib.pyplot as plt | |||||
| from sklearn import datasets, neighbors, linear_model | |||||
| # load data | |||||
| digits = datasets.load_digits() | |||||
| X_digits = digits.data | |||||
| y_digits = digits.target | |||||
| print("Feature dimensions: ", X_digits.shape) | |||||
| print("Label dimensions: ", y_digits.shape) | |||||
| # + | |||||
| # plot sample images | |||||
| nplot = 10 | |||||
| fig, axes = plt.subplots(nrows=1, ncols=nplot) | |||||
| for i in range(nplot): | |||||
| img = X_digits[i].reshape(8, 8) | |||||
| axes[i].imshow(img) | |||||
| axes[i].set_title(y_digits[i]) | |||||
| # + | |||||
| # split train / test data | |||||
| n_samples = len(X_digits) | |||||
| n_train = int(0.4 * n_samples) | |||||
| X_train = X_digits[:n_train] | |||||
| y_train = y_digits[:n_train] | |||||
| X_test = X_digits[n_train:] | |||||
| y_test = y_digits[n_train:] | |||||
| # + | |||||
| # do KNN classification | |||||
| knn = neighbors.KNeighborsClassifier() | |||||
| logistic = linear_model.LogisticRegression() | |||||
| print('KNN score: %f' % knn.fit(X_train, y_train).score(X_test, y_test)) | |||||
| print('LogisticRegression score: %f' % logistic.fit(X_train, y_train).score(X_test, y_test)) | |||||
| # - | |||||
| # ## References | |||||
| # * [Digits Classification Exercise](http://scikit-learn.org/stable/auto_examples/exercises/plot_digits_classification_exercise.html) | |||||
| # | |||||
| @@ -0,0 +1,16 @@ | |||||
| # Pyton技巧 | |||||
| ## Python的包管理工具: `pip` | |||||
| 由于python是模块化的开发,因此能够能够利用其他人写的现成的包来快速的完成特定的任务。为了加快包的安装,python有很多包管理的工具,其中`pip`是目前使用最多的包管理工具。 | |||||
| * [pip的安装、使用等](pip.md) | |||||
| 但是由于直接使用pip去访问国外的网站慢,所以需要设置好pip的镜像,从而加快包的安装 | |||||
| ## Python的虚拟环境: `virtualenv` | |||||
| 由于Python可以通过`pip`工具方便的安装包,因此极大的加快了程序编写的速度。但由于公开的包很多,不可避免的带来了包依赖导致的无法安装某些程序的问题。针对这个问题可以使用`docker`来构建一个隔离的环境来安装所需要的包,但有的时候还是希望在本机安装,因此需要使用`virtualenv`工具来安装虚拟的python环境。 | |||||
| * [virtualenv的安装、使用](virtualenv.md) | |||||
| * [virtualenv便捷管理工具:virtualenv_wrapper](virtualenv_wrapper.md) | |||||
| @@ -0,0 +1,66 @@ | |||||
| # Python的包管理工具: `pip` | |||||
| 由于python是模块化的开发,因此能够能够利用其他人写的现成的包来快速的完成特定的任务。为了加快包的安装,python有很多包管理的工具,其中`pip`是目前使用最多的包管理工具。 | |||||
| ## 1. 安装pip | |||||
| 在ubuntu系统可以直接安装python-pip | |||||
| ``` | |||||
| # Python 3的pip (建议安装Python3) | |||||
| sudo apt-get install python3-pip | |||||
| # Python 2的pip | |||||
| sudo apt-get install python3-pip | |||||
| ``` | |||||
| Upgrade pip | |||||
| ``` | |||||
| sudo pip3 install --upgrade pip | |||||
| ``` | |||||
| 安装之后,可以输入`pip`查看简要的使用说明。**需要注意的是,通过系统安装的pip,在使用pip安装包的时候,需要用sudo来执行。** | |||||
| ## 2. pip的命令 | |||||
| ### 2.1 查找一个给定名字的package | |||||
| ``` | |||||
| pip search numpy | |||||
| ``` | |||||
| 会找到很多跟numpy有关联的包,可以拷贝每一行最前面的那个包名字,通过安装命令去安装。 | |||||
| ### 2.2 安装一个给定的package | |||||
| ``` | |||||
| $ pip install numpy | |||||
| ``` | |||||
| 安装`numpy`这个包,同时它的依赖也自动安装到系统。 | |||||
| 使用一个给定的URL安装包 | |||||
| ``` | |||||
| $ pip -f URL install PACKAGE # 从指定URL下载安装包 | |||||
| ``` | |||||
| ### 2.3 升级一个包 | |||||
| ``` | |||||
| $ pip -U install PACKAGE # 升级包 | |||||
| ``` | |||||
| ### 2.4 列出当前系统中已经安装的包 | |||||
| ``` | |||||
| $ pip list | |||||
| ``` | |||||
| 查看一个安装好的包的信息 | |||||
| ``` | |||||
| $ pip show numpy | |||||
| ``` | |||||
| ## 3. 设置pip的镜像 | |||||
| 但是由于直接使用pip去访问国外的网站慢,所以需要设置好pip的镜像,从而加快包的安装。目前国内有很多pip包镜像,选择其中一个就可以加快很多安装速度 | |||||
| ``` | |||||
| pip config set global.index-url 'https://mirrors.ustc.edu.cn/pypi/web/simple' | |||||
| ``` | |||||
| @@ -0,0 +1,59 @@ | |||||
| # virtualenv manual | |||||
| ## 1. Install | |||||
| virtualenv 是一个创建隔绝的Python环境的工具。virtualenv创建一个包含所有必要的可执行文件的文件夹,用来使用Python工程所需的包。 | |||||
| ``` | |||||
| pip install virtualenv | |||||
| ``` | |||||
| 如果当前pip是python2的话,则后续默认创建的虚拟环境就是python2;否则是python3的 | |||||
| ## 2. 创建虚拟环境 | |||||
| 创建一个虚拟环境 | |||||
| ``` | |||||
| $ mkdir -p ~/virtualenv; cd ~/virtualenv | |||||
| $ virtualenv venv # venv 是虚拟环境的目录名 | |||||
| ``` | |||||
| virtualenv venv 将会在当前的目录中创建一个文件夹,包含了Python可执行文件,以及 pip 库的一份拷贝,这样就能安装其他包了。虚拟环境的名字(此例中是 venv )可以是任意的;若省略名字将会把文件均放在当前目录。 | |||||
| 在任何你运行命令的目录中,这会创建Python的拷贝,并将之放在叫做 venv 的文件中。 | |||||
| 你可以选择使用一个Python解释器: | |||||
| ``` | |||||
| $ virtualenv -p /usr/bin/python2.7 venv # -p参数指定Python解释器程序路径 | |||||
| ``` | |||||
| ## 3. 使用虚拟环境 | |||||
| 要开始使用虚拟环境,其需要被激活: | |||||
| ``` | |||||
| $ source ~/virtualenv/venv/bin/activate | |||||
| ``` | |||||
| 从现在起,任何你使用pip安装的包将会放在 venv 文件夹中,与全局安装的Python隔绝开。 | |||||
| 像平常一样安装包,比如: | |||||
| ``` | |||||
| $ pip install requests | |||||
| ``` | |||||
| ## 4. 如果你在虚拟环境中暂时完成了工作,则可以停用它: | |||||
| ``` | |||||
| $ . venv/bin/deactivate | |||||
| ``` | |||||
| 这将会回到系统默认的Python解释器,包括已安装的库也会回到默认的。 | |||||
| ## 5. 删除一个虚拟环境 | |||||
| 要删除一个虚拟环境,只需删除它的文件夹。(执行 rm -rf venv )。 | |||||
| 这里virtualenv 有些不便,因为virtual的启动、停止脚本都在特定文件夹,可能一段时间后,你可能会有很多个虚拟环境散落在系统各处,你可能忘记它们的名字或者位置。 | |||||
| @@ -0,0 +1,59 @@ | |||||
| # virtualenvwrapper | |||||
| 鉴于virtualenv不便于对虚拟环境集中管理,所以推荐直接使用virtualenvwrapper。 virtualenvwrapper提供了一系列命令使得和虚拟环境工作变得便利。它把你所有的虚拟环境都放在一个地方。 | |||||
| 安装virtualenvwrapper(确保virtualenv已安装) | |||||
| ``` | |||||
| pip install virtualenvwrapper | |||||
| pip install virtualenvwrapper-win #Windows使用该命令 | |||||
| ``` | |||||
| 安装完成后,在~/.bashrc写入以下内容 | |||||
| ``` | |||||
| # virtualenv | |||||
| export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 | |||||
| export WORKON_HOME=/home/bushuhui/virtualenv | |||||
| source /usr/local/bin/virtualenvwrapper.sh | |||||
| ``` | |||||
| 其中VIRTUALENVWRAPPER_PYTHON指定了使用那个python作为解释器 | |||||
| ## 1.创建虚拟环境 mkvirtualenv | |||||
| ``` | |||||
| mkvirtualenv venv | |||||
| ``` | |||||
| 这样会在WORKON_HOME变量指定的目录下新建名为venv的虚拟环境。 | |||||
| 若想指定python版本,可通过"--python"指定python解释器 | |||||
| ``` | |||||
| mkvirtualenv --python=/usr/local/python3.5.3/bin/python venv | |||||
| ``` | |||||
| ## 2. 基本命令 | |||||
| 查看当前的虚拟环境目录 | |||||
| ``` | |||||
| [root@localhost ~]# workon | |||||
| py2 | |||||
| py3 | |||||
| ``` | |||||
| 切换到虚拟环境 | |||||
| ``` | |||||
| [root@localhost ~]# workon py3 | |||||
| (py3) [root@localhost ~]# | |||||
| ``` | |||||
| 退出虚拟环境 | |||||
| ``` | |||||
| (py3) [root@localhost ~]# deactivate | |||||
| [root@localhost ~]# | |||||
| ``` | |||||
| 删除虚拟环境 | |||||
| ``` | |||||
| rmvirtualenv venv | |||||
| ``` | |||||