python 学习

环境

安装python

安装python

apt install python2.7
apt install python3.4

CentOS 7 安装 Python 3.6 | CentOS教程 - 与知

安装pip

pip is already installed if you are using Python 2 >=2.7.9 or Python 3 >=3.4 downloaded from python.org or if you are working in a Virtual Environment created by virtualenv or pyvenv. Just make sure to upgrade pip. Installation — pip 18.1 documentation

同时安装 Python 2 与Python 3 的方法及pip模块的下载安装 - 天木星辰 - 博客园 使用这个脚本get-pip.py,使用不同版本的python运行就会安装对应的pip。

安装pip的其他方式: apt-get install python3-pip I have python3.4 but no pip or ensurepip.. is something wrong with my python3.4 version? python -m ensurepip python3.6 安装后没有pip? - 知乎

安装jupyterlab

帮助文档 The Jupyter Notebook — Jupyter Notebook 5.7.2 documentation docker镜像 https://hub.docker.com/r/jupyter/datascience-notebook/ 官方的datascience镜像整合了很多东西,也可以选择使用base镜像。 默认启用的是经典的jupyter,如果想使用正在测试的jupyterlab可以执行docker时增加cmd:start.sh jupyter lab。 start.sh和start-notebook.sh提供了很多可选参数,参考Common Features docker-stacks documentation

完整启动命令:docker run -d -it --name datascience_jupyter_lab -v jupyter_notebook:/home/jovyan/work -p 8909:8888 jupyter/datascience-notebook start.sh jupyter lab

jupyter安装其他内核

How do I add python3 kernel to jupyter (IPython) Installing the IPython kernel — IPython 7.1.1 documentation

python -m ipykernel install --help
# --user 表示安装到当前用户
python2 -m pip install ipykernel
python2 -m ipykernel install --user
python3 -m pip install ipykernel
python3 -m ipykernel install --user

安装python版本管理,包管理,虚拟环境 工具

virtualenv 、pyenv、Anaconda 均可以进行python的版本管理和包管理 Anaconda是一个用于科学计算的Python发行版,自带了Numpy、Sklearn等机器学习相关的库 Virtualenv是一个Python虚拟环境库,用来创建一个新的Python环境 pyenv也是一个python虚拟环境工具,但是已经很久没有更新支持了

安装virtualenv Installation - virtualenv 16.1.0 documentation virtualenv-廖雪峰的官方网站

Python3.3以上的版本通过venv模块原生支持虚拟环境,可以代替Python之前的virtualenv。

python3 -m venv ./venv
source ./venv/bin/activate
`

环境常见问题

mac python2.7 报错 ImportError: No module named zlib

[已解决] mac python2.7 报错 ImportError: No module named zlib - V2EX

解决了,用 brew 安装 python@2 时,其中有个警告时需要 apple commandline tools,如果没有他会从源码编译一个 python 出来,所以仍然可以安装上,但是这个是不 适配的,所以安装上命令行工具后(xcode-select --install),再重新装一遍 python 就好了(brew reinstall python@2)

以下为原帖:

mac 系统,装了 python2 和 python3,但是执行 python2.7.10 的 pip 命令会报错。

Traceback (most recent call last):
File "/usr/local/bin/pip", line 11, in <module>
load_entry_point('pip==18.0', 'console_scripts', 'pip')()
File "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 484, in load_entry_point
return get_distribution(dist).load_entry_point(group, name)
File "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2714, in load_entry_point
return ep.load()
File "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2332, in load
return self.resolve()
File "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2338, in resolve
module = __import__(self.module_name, fromlist=['__name__'], level=0)
File "/usr/local/lib/python2.7/site-packages/pip/_internal/__init__.py", line 20, in <module>
from pip._vendor.urllib3.exceptions import DependencyWarning
File "/usr/local/lib/python2.7/site-packages/pip/_vendor/urllib3/__init__.py", line 8, in <module>
from .connectionpool import (
File "/usr/local/lib/python2.7/site-packages/pip/_vendor/urllib3/connectionpool.py", line 36, in <module>
from .response import HTTPResponse
File "/usr/local/lib/python2.7/site-packages/pip/_vendor/urllib3/response.py", line 3, in <module>
import zlib
ImportError: No module named zlib

python 是用 homebrew 安装的。

网上说要安装 zlib 库,可是 mac 系统是自带一个版本的 zlib 的,我没法再装一个其他版本的吧?会冲突吧? 用 brew 安装 zlib 时的提示:

zlib: stable 1.2.11 (bottled) [keg-only]
General-purpose lossless data-compression library
https://zlib.net/
/usr/local/Cellar/zlib/1.2.11 (12 files, 373KB)
Poured from bottle on 2018-11-26 at 18:31:13
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/zlib.rb
==> Caveats
zlib is keg-only, which means it was not symlinked into /usr/local,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.

知识

init.py的作用 Python杂谈: init.py的作用

python2中一个目录只有带有__init__.py才能识别会一个模块,使用import导入,但是在python3中,就算没有这个文件也可以作为模块导入。

空值与空对象判断 Python中的空值判断 Python中的NULL和None python中的null值

python是把0,空字符串‘’,空列表[]和None都看作False,把其他数值和非空字符串都看作True

命令行调用python的几种方式

已如下项目结构为例:

# 目录结构如下
package/
__init__.py
mod1.py
package2/
__init__.py
run.py
# run.py 内容如下
import sys
from package import mod1
print(sys.path)

启动方式:

# 直接启动(失败)
$ python package2/run.py
Traceback (most recent call last):
File "package2/run.py", line 2, in <module>
from package import mod1
ImportError: No module named package
# 以模块方式启动(成功) -m 方式启动类似于import模块的操作,会把当前执行目录('')加入sys.path中
$ python -m package2.run
['',
'/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python27.zip',...]
# 设置PYTHONPATH变量 (成功)
$ PYTHONPATH=. python package2/run.py

项目开发

python项目开发中的知识

项目交付

依赖管理 python中项目使用了那些第三方库,可以使用如下命令导出和导入。参考:Python项目交付中环境迁移问题

# 导出所有库及库的版本到文件
pip freeze > requirements.txt
# 从文件安装依赖
pip install -r requirements.txt
# conda中的使用
conda env export > environment.yml
conda env create -f environment.yml

项目迁移 如果想要迁移项目,众多依赖包重新下载很费劲,但如果你的项目使用了虚拟环境,比如virtualenv,那么可以带着虚拟环境一起打包迁移。