0%

pip使用国内镜像源

pip是Python中非常方便易用的安装包管理器,但是在实际下载安装包的时候总是连接不上或者下载速度特别慢, pypi.python.org就是其中一个。

所以,使用pip给Python安装软件时,经常出现Timeout连接超时错误。修改pip连接的软件库到国内的源可以解决这个问题。

方法如下:

直接修改配置文件

1)检查pip.conf文件是否存在

1
2
3
4
$ cd ~
$ mkdir .pip
$ ls ~/.pip
$

2)直接编辑pip.conf
vi ~/.pip/pip.conf

1
2
3
4
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host = mirrors.aliyun.com

或者

1
2
3
4
5
6
7
8
9
10
11
12
13
[global]  

timeout = 6000

index-url = http://pypi.douban.com/simple/

[install]

use-mirrors = true

mirrors = http://pypi.douban.com/simple/

trusted-host = pypi.douban.com

临时换源

如果只是想临时更改一下,可以使用-i参数,

命令格式:sudo pip3 install 包名 -i 镜像源url

比如:

1
$ pip3 install numpy -i https://pypi.douban.com/simple

简介

pip是Python中非常方便易用的安装包管理器,但是在实际下载安装包的时候总是连接不上或者下载速度特别慢, pypi.python.org就是其中一个。

所以,使用pip给Python安装软件时,经常出现Timeout连接超时错误。修改pip连接的软件库可以解决这个问题。

更新软件

有两种方法,一种可以通过逐个更新模块:

1
2
3
4
5
# 查看所有可更新的模块:  
pip list --outdated

# 更新某一个模块:     
pip install --upgrade module_name
1
2
3
4
5
#安装对应的模块:     
$ pip install pip-review

#更新所有的模块:     
$ pip-review --local --interactive

更新源

方法如下:

直接修改配置文件

1)检查pip.conf文件是否存在

1
2
3
4
$ cd ~
$ mkdir .pip
$ ls ~/.pip
$

2)直接编辑pip.conf
sudo vi ~/.pip/pip.conf

1
2
3
4
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host = mirrors.aliyun.com

或者

1
2
3
4
5
6
7
8
9
10
11
12
13
[global]  

timeout = 6000

index-url = https://pypi.douban.com/simple/

[install]

use-mirrors = true

mirrors = https://pypi.douban.com/simple/

trusted-host = pypi.douban.com

临时换源

命令格式:sudo pip3 install 包名 -i 镜像源url

比如:
sudo pip3 install django -i https://pypi.douban.com/simple

Troubleshooting

1
2
3
4
5
pip install mpi4py
Traceback (most recent call last):
File "~/virtual_evn/bin/pip", line 6, in <module>
from pip._internal.cli.main import main

解决方法:

1
$ export PYTHONPATH=~/virtual_env/lib/python3.7/site-packages/

PyQt界面设计

UI => Python

在Qt的界面开发开发中,设计界面可以使用Qt Creator或者Designer,本质是一样的。

设计完成会生成一个ui后缀的文件,格式其实是xml语言的文本文件。

按照设计比如生成一个window.ui的文件,那么可以使用pyuic来生成python文件,命令如下所示:

1
pyuic5 window.ui -o window.py

此时的window.py文件就是界面的python接口了,接下来我们需要做的就是编写一个程序调用这个界面,简单的如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog
from window import *

class MyMainWindow(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(MyMainWindow, self).__init__(parent)
self.setupUi(self)

self.actionClose.triggered.connect(self.close)
self.actionOpen.triggered.connect(self.openMsg)

if __name__ == '__main__':
app = QApplication(sys.argv)
myWin = MyMainWindow()
myWin.show()
sys.exit(app.exec_())

RC = > Python

PyQt5提供了pyrcc5来将资源文件转化为python文件,默认加上rc后缀与Qt Designer保持一致。命令如下所示:

1
pyrcc5 app.qrc -o app_rc.py

check一下生成的python文件,可以直接调用。

python 环境变量设置PYTHONPATH

PYTHONPATH是Python搜索路径,默认我们import的模块都会从PYTHONPATH里面寻找。

打印PYTHONPATH:

1
2
3
import os
print sys.path
>['', '/usr/local/lib/python2.7/dist-packages/dlib-19.4.0-py2.7-linux-x86_64.egg', '/home/leo',...]

注意:sys.path 也可以用 os.sys.path 替换,两个应该是同一个命令,推荐使用sys.path, 因为 os.sys.path 在python document 中好像没有提及.

设置PYTHONPATH

方法一:命令窗口添加路径

1
export PYTHONPATH=$PYTHONPATH:/home/leo

注意:此方法只在当前命令窗口生效,即如果打开一个新的Terminal 窗口,定位到当前目录, 打印PYTHONPATH 是没有刚才加入的路径的.

方法二:在python 中添加:

1
2
import sys
sys.path.append('/home/leo/')

reStructuredText 简介

reStructuredText (reST) 为文档生成者提供足够的信息. reST 被认为是简单,实用的标记语言,因此学习它不会花太多时间.

See also

读物 reStructuredText User Documentation. 文档内 “ref” 链接指向reST的分类参考文献.

段落

段落 (:duref:ref ) 是reST 文件的基本模块. 段落是由空行分隔的一段文本. 和Python一样, 对齐也是reST的操作符, 因此同一段落的行都是左对齐的.

内联标记

标准的reST 内联标记相当简单:

  • 星号: *text* 是强调 (斜体),
  • 双星号: **text** 重点强调 (加粗),
  • 反引号: text 代码样式.

星号及反引号在文本中容易与内联标记符号混淆,可使用反斜杠符号转义.

标记需注意的一些限制:

  • 不能相互嵌套,
  • 内容前后不能由空白: 这样写* text* 是错误的,
  • 如果内容需要特殊字符分隔. 使用反斜杠转义,如: thisis\ *one*\ word.

这些限制在未来版本可能会被改善.

reST 也允许自定义 “文本解释角色”’, 这意味着可以以特定的方式解释文本. Sphinx以此方式提供语义标记及参考索引,操作符为 :rolename:content``.

标准reST 提供以下规则:

详情请查看 内联标记 .

列表与引用

列表标记 (:duref:ref ) 的使用最自然: 仅在段落的开头放置一个星号和一个缩进. 编号的列表也可以;也可以使用符号 # 自动加序号:

1
2
3
4
5
6
7
8
9
* 这是一个项目符号列表.
* 它有两项,
第二项使用两行.

1. 这是个有序列表.
2. 也有两项.

#. 是个有序列表.
#. 也有两项.

列表可以嵌套,但是需跟父列表使用空行分隔

1
2
3
4
5
6
7
* 这是
* 一个列表

* 嵌套列表
* 子项

* 父列表继续

定义列表 (:duref:ref )

1
2
3
4
5
6
7
术语 (term 文本开头行)
定义术语,必须缩进

可以有多段组成

下一术语(term)
描述.

一行仅能写一个术语.

引用段落 (:duref:ref ) 仅使用缩进(相对于周围段落)创建.

行模块 (:duref:ref ) 可以这样分隔

1
2
3
| 这些行
| 在源文件里
| 被分隔的一模一样.

还有其他有用的模块:

源代码

字面代码块 (:duref:ref ) 在段落的后面使用标记 :: 引出. 代码块必须缩进(同段落,需要与周围文本以空行分隔):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
这是一段正常文本. 下一段是代码文字::

它不需要特别处理,仅是
缩进就可以了.

它可以有多行.

再是正常的文本段.


.. code-block:: c
:linenos:
:emphasize-lines: 3,6 # 高亮显示3、6行

void foo()
{
int i;

for(i=0; i<10; i++)
printf("i: %d\n", a);
}

这个 :: 标记很优雅:

  • 如果作为独立段落存在,则整段都不会出现在文档里.
  • 如果前面有空白,则标记被移除.
  • 如果前面是非空白,则标记被一个冒号取代.

因此上面的例子第一段文字将变为”下一段是代码文字:”.

表格

支持两种表格. 一种是 网格表格 (:duref:ref ), 可以自定义表格的边框. 如下:

1
2
3
4
5
6
7
8
+------------------------+------------+----------+----------+
| Header row, column 1 | Header 2 | Header 3 | Header 4 |
| (header rows optional) | | | |
+========================+============+==========+==========+
| body row 1, column 1 | column 2 | column 3 | column 4 |
+------------------------+------------+----------+----------+
| body row 2 | ... | ... | |
+------------------------+------------+----------+----------+

简单表格 (:duref:ref ) 书写简单, 但有一些限制: 需要有多行,且第一列元素不能分行显示,如下:

1
2
3
4
5
6
7
8
=====  =====  =======
A B A and B
===== ===== =======
False False False
True False False
False True False
True True True
===== ===== =======

超链接

外部链接

使用 ``链接文本 http://example.com/_ 可以插入网页链接. 链接文本是网址,则不需要特别标记,分析器会自动发现文本里的链接或邮件地址.

可以把链接和标签分开 (:duref:ref ), 如下:

1
2
3
段落里包含 `a link`_.

.. _a link: http://example.com/

内部链接

内部链接是Sphinx特定的reST角色, 查看章节 交叉索引的位置.

章节

章节的标题 (:duref:ref ) 在双上划线符号之间(或为下划线), 并且符号的长度不能小于文本的长度:

1
2
3
=================
This is a heading
=================

通常没有专门的符号表示标题的等级,但是对于Python 文档,可以这样认为:

  • # 及上划线表示部分
  • * 及上划线表示章节
  • =, 小章节
  • -, 子章节
  • ^, 子章节的子章节
  • ", 段落

当然也可以标记(查看 reST 文档), 定义章节的层次,但是需要注意输出格式(HTML, LaTeX)所支持的层次深度 .

显式标记

显式标记”Explicit markup” (:duref:ref ) 用在那些需做特殊处理的reST结构中, 如尾注,突出段落,评论,通用指令.

显式标记以 .. 开始,后跟空白符,与下面段落的缩进一样. (在显示标记与正常的段落间需有空行,这听起来有些复杂,但是写起来会非常直观.)

指令

指令 (:duref:ref ) 是显式标记最常用的模块. 也是reST 的扩展规则, 在 Sphinx 经常被用到.

文档工具支持以下指令:

设置不使用指令 :dudir:sectnum, :dudir:header:dudir:footer.

Sphinx 新增指令可查阅 Sphinx标记的组成.

指令有名字,参数,选项及内容组成. (记住这些,在下面一小节中自定义指令里会用到).来看一个例子:

1
2
3
4
5
.. function:: foo(x)
foo(y, z)
:module: some.module.name

返回用户输入的一行文本.

function 是指令名字. 在第一行和第二行给出了两个参数, 及一个选项 module (如你所见,选项在参数后给出,由冒号引出). 选项必须与指令有一样的缩进.

指令的内容在隔开一个空行后,与指令有一样缩进.

图像

reST 支持图像指令 (:dudir:ref ), 如下:

1
2
.. image:: gnu.png
(选项)

这里给出的文件名( gnu.png) 必须是源文件的相对路径,如果是绝对路径则以源目录为根目录. 例如,在文件 sketch/spam.rst 引用图像 images/spam.png ,则使用 ../images/spam.png 或者 /images/spam.png.

Sphinx 会自动将图像文件拷贝到输出目录的子目录里,( 输出HTML时目录为 _static )

图像的大小选项 (widthheight) : 如果没有单位或单位为像素, 给定的尺寸信息仅在输出通道支持像素时才有用 ( 如输出LaTeX 没用). 其他单位在输出(如 pt )HTML、LaTeX 时被用到.

Sphinx 延伸了标准的文档化行为,只需在后面加星号:

1
.. image:: gnu.*

上面这样写,Sphinx 会搜索所有名字匹配的图像,而不管图像类型. 每个生成器则会选择最合适的图像. 一般,在源文件目录里文件名 gnu.* 会含有两个文件 gnu.pdfgnu.png , LaTeX 生成器会选择前者,而HTML 生成器则匹配后者.

Changed in version 0.4: 添加对文件名以星号结束的支持.

Changed in version 0.6: 图像路径可以是绝对路径.

尾注

尾注 (:duref:ref ), 使用 [#name]_ 标记尾注的位置, 尾注的内容则在文档底部红色标题”Footnotes”的后面 , 如下:

1
2
3
4
5
6
Lorem ipsum [#f1]_ dolor sit amet ... [#f2]_

.. rubric:: Footnotes

.. [#f1] 第一条尾注的文本.
.. [#f2] 第二条尾注的文本.

你也可以使用数字尾注 ([1]_) 或使用自动排序的([#]_).

引用

支持标准的reST 引用 (:duref:ref ) , 且新增了”global”特性, 所有参考文献不受所在文件的限制. 如:

1
2
3
Lorem ipsum [Ref]_ dolor sit amet.

.. [Ref] 参考文献, 书,URL 等.

引用的使用同尾注很相近,但是它们没有数字标签或以 # 开始.

替换

reST 支持替换 “substitutions” (:duref:ref ), 有一小段文本或标记被关联到 |name|. 定义与尾注一样需有明确的标记块,如下:

1
.. |name| replace:: replacement *text*

或者:

1
2
.. |caution| image:: warning.png
:alt: Warning!

详情查看 :duref:reST reference for substitutions .

如果想在所有文档中使用这些替换, 需把它们放在 :confval:rst_prolog 或一个单独文件里, 然后在使用它们的文档文件里包含这个文件,包含指令 include . (请给出包含文件的扩展名,已区别于其他的源文件,避免Sphinx将其作为独立的文档文件.)

Sphinx 定义了一些默认的替换, 请查看 替换.

评论

有明确标记块但又不是有效的结构标记的标记 (像上面的尾注)都被视为评论 (:duref:ref ). 例如:

1
.. 这是一个评论.

可以通过缩进产生多行评论:

1
2
3
4
5
..
这整个缩进块都是
一个评论.

仍是一个评论.

源编码

在reST使用Unicode字符可以容易的包含特殊字符如破折号,版权标志. Sphinx 默认源文件使用UTF-8 编码; 你可以通过 :confval:source_encoding 的配置值改变编码.

常见问题

具体使用中可能会遇到一些问题:

  • 内联标记的分离 如上面所讲,内联标记需与周围的文本使用空格分隔, 内联标记内部则使用反斜线转义空格. 查看详情: the reference .
  • 内联标记不能嵌套 像这样写 *see :func:foo* 是不允许的.

Footnotes

[1] 当默认主域里包含指令 class , 这个指令将被隐藏 因此, Sphinx使用 rst-class.

Be sure to say yes to autodoc

More information can refer https://zh-sphinx-doc.readthedocs.io/en/latest/rest.html#id2

Python中文档Sphinx的使用

安装软件包

1
$ pip install Sphinx

生成模板

1
2
# 大部分默认即可
$ sphinx-quickstart

此时可以看到生成的文件为:

1
2
3
4
➜  docs git:(master) ✗ ls 

_build _static Makefile
_templates conf.py index.rst

此时查看index.rst文件

1
2
3
4
5
6
7
8
9
10
11
12
.. toctree::
:maxdepth: 2
:caption: Contents:


Indices and tables
==================

* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`

输出文件

1
2
3
4
# 生成html文件
$ make html
# 生成pdf文件
$ make latexpdf

新增文件

此时新增一个文档和图片

1
2
touch hello.rst
cp test.png _static/test.png

更新index.rst文件,注意缩进

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
.. toctree::
:maxdepth: 2
:caption: Contents:

hello.rst

.. image:: _static/test.png

Indices and tables
==================

* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`

更新模板

可以通过修改_static/default.css_templates/layout.html来修改和定制网站的外观。

多语种支持

安装软件

1
$pip3 install sphinx-intl

增加下列信息到conf.py,

1
2
locale_dirs = ['locale/']
gettext_compact = False

生成pot文件

1
make gettext

生成po文件

1
$ sphinx-intl update -p _build/gettext -l en

此时就能看到在文件locale/en/LC_MESSAGES中的信息

构建翻译的文档

1
$ make -e SPHINXOPTS="-D language='en'" html

Be sure to say yes to autodoc

More information can refer [http://www.matplotlib.org/sampledoc]

python 虚拟环境virtualenv

在开发Python应用程序的时候,经常会因为各个应用程序使用的环境或包不同,而导致应用程序无法运行,亦或者因为没有管理员权限无法安装相应的包。

此时就需要使用Python的强大虚拟机工具virtualenv了,为每个应用创建一套自己的Python运行环境。

安装

首先,我们用pip安装virtualenv:

1
$ pip3 install virtualenv

使用

第一步,创建目录:

1
2
$ mkdir myproject
$ cd myproject/

第二步,创建一个独立的Python运行环境,命名为venv:

1
2
3
4
5
6
7
8
9
10
$ virtualenv --no-site-packages venv

Using base prefix '/usr/local/.../Python.framework/Versions/3.4'

New python executable in venv/bin/python3.4

Also creating executable in venv/bin/python

Installing setuptools, pip, wheel...done.

命令virtualenv就可以创建一个独立的Python运行环境,我们还加上了参数–no-site-packages,这样,已经安装到系统Python环境中的所有第三方包都不会复制过来,这样,我们就得到了一个不带任何第三方包的“干净”的Python运行环境。

新建的Python环境被放到当前目录下的venv目录。有了venv这个Python环境,可以用source进入该环境:

第三部,调用虚拟环境

1
2
3
4
$ source venv/bin/activate

(venv)$

注意到命令提示符变了,有个(venv)前缀,表示当前环境是一个名为venv的Python环境。

第四步,安装各种包

下面正常安装各种第三方包,并运行python命令:

1
2
3
4
5
6
7
8
9
10
(venv)$ pip install jinja2

...

Successfully installed jinja2-2.7.3 markupsafe-0.23

(venv)$ python myapp.py

...

在venv环境下,用pip安装的包都被安装到venv这个环境下,系统Python环境不受任何影响。也就是说,venv环境是专门针对myproject这个应用创建的。

第五步,退出虚拟环境

退出当前的venv环境,使用deactivate命令:

1
2
3
(venv)$ deactivate

$

此时就回到了正常的环境,现在pip或python均是在系统Python环境下执行。

指定python版本

如果存在多个python解释器,可以选择指定一个Python解释器(比如python2.7),没有指定则由系统默认的解释器来搭建,比如下面的命令为使用python2.7来搭建。

1
$ virtualenv -p /usr/bin/python2.7 my_project_env

参考

python 虚拟环境管理工具virtualenvwrapper

你可以在系统的任意地方创建虚拟环境,当下次需要这个某个环境的时候很难找,virtualenv不便于对环境的集中管理,virtualenvwrapper很好的解决了这个问题

首先需要安装:

1
2
$ pip install virtualenv
$ pip install virtualenvwrapper

接下来创建一个目录,用来存放我们的虚拟环境,比如

1
$ mkdir ~/virtualenv/

然后配置环境变量:

1
2
3
$ export WORKON_HOME=~/Pyenv
$ VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
$ source /usr/local/bin/virtualenvwrapper.sh

这些内容可以写进bashrc文件中。

创建虚拟环境

利用 virtualenvwrapper,我们可以使用下面的命令轻松创建一个虚拟环境。

1
2
3
4
5
$ mkvirtualenv spide

$ mkvirtualenv --python=/usr/local/python3.7/bin/python py3 #指定解释器为3.7

$ mkvirtualenv -p python3.7 pynew #指定版本比较喜欢用这个

然后就可以使用包管理命令了:

1
2
3
4
5
6
7
8
9
10
$ lsvirtualenv -b #查看虚拟环境

$ workon #切换或者进入虚拟环境
$ workon virtualenv-name # 进入虚拟环境virtualenv-name

$ lssitepackages #查看当前环境中安装的那些包(启动虚拟环境后)

$ deactivate #退出虚拟环境

$ rmvirtualenv virtualname #虚拟环境名 删除虚拟环境

简介

在开发Python应用程序的时候,经常会因为各个应用程序使用的环境或包不同,而导致应用程序无法运行,亦或者因为没有管理员权限无法安装相应的包。

此时就需要使用Python的强大虚拟机工具virtualenv了,为每个应用创建一套自己的Python运行环境。

安装

首先,我们用pip安装virtualenv:

1
$ pip3 install virtualenv

使用

第一步,创建目录:

1
2
$ mkdir myproject
$ cd myproject/

第二步,创建一个独立的Python运行环境,命名为venv:

1
2
3
4
5
6
7
8
9
10
$ virtualenv --no-site-packages venv

Using base prefix '/usr/local/.../Python.framework/Versions/3.4'

New python executable in venv/bin/python3.4

Also creating executable in venv/bin/python

Installing setuptools, pip, wheel...done.

命令virtualenv就可以创建一个独立的Python运行环境,我们还加上了参数–no-site-packages,这样,已经安装到系统Python环境中的所有第三方包都不会复制过来,这样,我们就得到了一个不带任何第三方包的“干净”的Python运行环境。

新建的Python环境被放到当前目录下的venv目录。有了venv这个Python环境,可以用source进入该环境:

第三部,调用虚拟环境

1
2
3
4
$ source venv/bin/activate

(venv)$

注意到命令提示符变了,有个(venv)前缀,表示当前环境是一个名为venv的Python环境。

第四步,安装各种包

下面正常安装各种第三方包,并运行python命令:

1
2
3
4
5
6
7
8
9
10
11
12
(venv)$ pip install jinja2

...

Successfully installed jinja2-2.7.3 markupsafe-0.23

(venv)$ python myapp.py

...



在venv环境下,用pip安装的包都被安装到venv这个环境下,系统Python环境不受任何影响。也就是说,venv环境是专门针对myproject这个应用创建的。

第五步,退出虚拟环境

退出当前的venv环境,使用deactivate命令:

1
2
3
4
(venv)$ deactivate

$

此时就回到了正常的环境,现在pip或python均是在系统Python环境下执行。

指定python版本

如果存在多个python解释器,可以选择指定一个Python解释器(比如python2.7),没有指定则由系统默认的解释器来搭建,比如下面的命令为使用python2.7来搭建。

1
$ virtualenv -p /usr/bin/python2.7 my_project_env

参考

python 虚拟环境管理工具virtualenvwrapper

首先需要安装:

1
2
$ pip install virtualenv
$ pip install virtualenvwrapper

接下来创建一个目录,用来存放我们的虚拟环境,比如

1
$ mkdir ~/virtualenv/

然后配置环境变量:

1
2
3
$ export WORKON_HOME=~/Pyenv
$ VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
$ source /usr/local/bin/virtualenvwrapper.sh

这些内容可以写进bashrc文件中。

创建虚拟环境

利用 virtualenvwrapper,我们可以使用下面的命令轻松创建一个虚拟环境。

1
$ mkvirtualenv spide

然后就可以使用包管理命令了:

1
2
3
4
5
6
7
8
9
10
$ lsvirtualenv -b #查看虚拟环境

$ workon #切换或者进入虚拟环境
$ workon virtualenv-name # 进入虚拟环境virtualenv-name

$ lssitepackages #查看当前环境中安装的那些包(启动虚拟环境后)

$ deactivate #退出虚拟环境

$ rmvirtualenv #虚拟环境名 删除虚拟环境