如何设置干净的 python 开发环境?
激发
- 工欲善其事,必先利其器,愈学愈觉得环境干净的重要性
- Q. 如何控制开发环境,形成干净的
requirements.txt
?- 触发:Py101-004/chap3_note.md at master · JeetChan/Py101-004
- 为应用开发虚拟环境,保证干净的开发环境/工作环境
- 生成 requirements.txt 文件:
pip freeze >requirements.txt
- 对比发现自己的环境极其复杂,不相关的包也被列了出来
- 混杂的环境意识到割离不同开发环境的必要性
- 触发:Py101-004/chap3_note.md at master · JeetChan/Py101-004
参考
- [Python环境出坑记 | 浚宇的博客]http://blog.junyu.io/posts/0707-python-env-config.html
- HBPythonOperationEnv · DebugUself/du4proto Wiki
- The Hitchhiker’s Guide to Python! — The Hitchhiker's Guide to Python
探索
- #I 1 阅读 Python环境出坑记 | 浚宇的博客
-
不怪 anaconda 本身,如果你是数据科学工作者,并不希望被环境折腾,利用这样的套件是避免底层环境配置的好办法。但是对于python 的开发者来说,了解python 的生态系统,能够自己动手配置适合自己开发的环境还是很有必要的。
-
#Q mac 的文件结构目录含义?
- #A google
mac directory
#Q shell 的工作原理是什么?
-
#A google :
how shell work
- => What is a shell and how does it work? · OSKAR
- => xv6 - DRAFT as of September 3, 2014 - book-rev8.pdf
-
The shell is an ordinary program that reads commands From the user and executes them.and is the primary user interface to traditional Unix-like systems.
-
术语:
- xv6
- unix 原始操作程序,了解操作程序的好开端
- Unix-like Interface
- 类 Unix交互界面,其实就是命令行
- Kernel 的传统结构
- 传统结构:一个特殊的程序提供运行其他所有程序的服务
- Process
- 进程
- a running program has memory contain
- instruction
- 指令,执行程序计算
- data
- 数据,即程序执行的变量
- stack
- 堆栈,组织程序的调用
- organize procedur call
- instruction
- Procedure call
- 程序调用
- system call
- 系统调用,调用 kernel 的服务
- User Space vs Kernel Space
- xv6
-
- =>How does the shell work
-
the sequence of events
- 1)bash calls fork() to create a new process.
- 2)The parent process calls wait() and goes to sleep.
- 3)More or less simultaneously the child process calls exec() to switch to the specified program.
- 4)The program runs and outputs to the screen.
- 5)The program exits. The kernel notifies bash.
- 6)bash wakes up and prints a new prompt.
-
-
#O shell 就是一段程序,功能与图形界面基本相同,实现人与计算机交互的媒介,图形界面能做的事情 shell 都能做,而 shell 更利于日常操作的自动化
- 个人理解:其实核心就2个动作
- 1.位置: 找到执行文件
- 2.动作: 执行文件,返回结果
- 个人理解:其实核心就2个动作
#Q Console,Terminal 与 Shell 的区别 是什么?
-
#I 参考
-
#I 细分
-
Terminal
- text input/output environment
- 可以多个
-
在古老的年代,一个机构可能只有一台主机,而机构的职员使用电传打印机(Teletypewritter 又简称为tty)通过串口连接到主机。后来人们又在电传打印机的基础上进行了改进,程序的输出不再是打印到纸带上而是显示在荧幕上,后来还支持彩色显示,这样的设备后来被称为终端(Terminal)。一台主机可以有很多个终端,早期的主机只支持串口线的终端,对应的设备叫做串口终端(Serials Terminal),后来又发展出了伪终端,以便于支持GUI,后来串口终端渐渐被图形界面的伪终端取代,也就是我们今天所说的终端。
-
Console
- physical terminal,包含计算机控件的仪表盘
- 只有一个
- 但是在主机的系统启动完成之前,终端是不能连接到主机上的。为了能记录出主机开机过程的日志,也便于在主机出故障无法启动操作系统时进行检修维护,有多了一个叫做控制台的设备。一台主机有且只能有一个控制台。文件主机的重要日志,比如开机关机的日志和记录,重要应用程序的日志,都会输出到控制台来。
-
Shell
- command line interpreter
- User <=> Kernel(Shell) <=> Hardware
-
用户通过终端输入一些命令,而这些命令计算机读不懂,因此shell是一种解释程序,它把用户写的命令,比如ls,翻译成计算机能懂的二进制语言,计算机明白了就返回文字,输出到控制台,控制台再通过终端展现给用户,这时终端就有了输入输出的功能。
- command line interpreter
-
-
#O 小结
- 用户在 Terminal 输入文本/命令,经过 Shell 的解释翻译成计算机能懂的二进制语言,执行指定程序并返回信息,具体的执行记录记录在 Console 中,而返回信息会再返回Terminal 呈现给用户.
#Q 如何任意配置独立适用的干净的开发环境?
-
#Q 0. 是否可以不卸载 connada 而使用pipenv?
- #A google
conda pipenv
- =>pipenv with some packages from conda · Issue #1469 · pypa/pipenv
-
Conda is a system package manager that happens to specialize mostly in Python packages
-
#O 其实可以的,所有的包管理工具都是程序,只有 shell 命令才会激活,只是相互交叉使用时会出现问题,单独使用时没有问题的
-
#O 还可以设置 pipenv 使用 conda 里的 python,conda 里的包,不过实际运行依旧会错,分开用较好
1
2$ pipenv --python /path/to/condaenv/python --site-packages
$ pipenv install -
- #A google
-
#A 1.pipenv下载尝试
- #A 命令行运行
brew install pipenv
-
#X Error: Permission denied @ dir_s_mkdir - /usr/local/Frameworks
1
2>sudo mkdir /usr/local/Frameworks
>sudo chown $(whoami):admin /usr/local/Frameworks -
#X ModuleNotFoundError: No module named 'setuptools'
- =>Python 3: ImportError "No Module named Setuptools" - Stack Overflow:-)
- #I
sudo apt-get install python3-setuptools
- #X mac 上没有apt-get
- #O
conda update setuptools
- #O
- #X mac 上没有apt-get
- #I
- #O 重新 运行
brew install pipenv
,成功!- 成功下载: /usr/local/Cellar/pipenv/11.8.0: 1,305 files, 19MB
- =>Python 3: ImportError "No Module named Setuptools" - Stack Overflow:-)
-
- #A 命令行运行
-
#A 2. pipenv 试用
- #A 创建虚拟环境
$ pipenv --three
- #X 系统报错,报错信息摘要如下
- #A 尝试其他命令
pipenv update
,报错依旧-
Warning: the environment variable LANG is not set!
export LANG=en_US.UTF-8
-
ValueError: unknown locale: UTF-8
- => ValueError: unknown locale: UTF-8 · Issue #187 · pypa/pipenv
- #O add below to
~/.zshrc
1
2export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8 - #O add below to
- => ValueError: unknown locale: UTF-8 · Issue #187 · pypa/pipenv
-
TypeError: 'NoneType' object is not subscriptable
- 上一个错误消除了,这个错误自然消失
-
- #O 可以成功运行
- #A 创建虚拟环境
-
#A 3. pipenv 管理环境学习
- #Q 关键问题: 如何创建新环境? 所谓的开发的环境包括哪些部分?
- #O 所谓的环境即是依赖,即该程序正常运行所需要的组件
- #O 原始的依赖管理有2种方式
- Simple Requirements
A list of top-level dependencies a project has, often without versions specified.
- 清晰展现 top-level Package, 但是太简短 hold 不住版本变化
- Exact Requirements
A complete list of all dependencies a project has, each with exact versions specified.
- 最佳实践,但是
$ pip install --upgrade
某些模块时体验不佳
- 最佳实践,但是
- pipenv 解决了这些问题
lock
展示所有依赖包,并且可以实现任意的添加删除graph
可以按层级展示所有依赖包
- Amazing!
- Simple Requirements
A list of top-level dependencies a project has, often without versions specified.
- #A 查看 Readme
- => pypa/pipenv: Python Development Workflow for Humans.
readme 的说明及其详细贴心,以下的命令来自自我的实验尝试
- #I 移动到项目所在位置:
~/newproject
- #I 尝试创建环境
-
初始的 py3环境
pipenv --three
- #X 错误代码摘要
1
2
3
4
5
6ERROR: The executable /Users/NBR-hugh/.local/share/virtualenvs/NBR-hugh-hUsIvz3I/bin/python3.6m is not functioning
ERROR: It thinks sys.prefix is '/Users/NBR-hugh' (should be '/Users/NBR-hugh/.local/share/virtualenvs/NBR-hugh-hUsIvz3I')
ERROR: virtualenv is not compatible with this system or executable
Virtualenv location:
Warning: Your Pipfile requires python_version 3.6, but you are using None (/bin/python).
- #I conda 的 python 运行起来还是有问题的,还是用 brew 下载依赖时下载的 python 好了
- #A google
how to change python path on mac
- #A google
- #A 修改 path ,替换 conda 的 python
- 打开配置文件
subl ~/.zshrc
,将原本的export PATH=~/anaconda3/bin:$PATH
- 失效成 =>
#export PATH=~/anaconda3/bin:$PATH
- 打开配置文件
- #O
pipenv --three
成功运行
- #X 错误代码摘要
-
- #I 演示视频中的基本操作
-
1.创建基本虚拟环境
pipenv --two
py2 基本环境pipenv --three
py3基本环境
-
2.安装包
pipenv install requests
安装 requests 包pipenv uninstall requests
卸载 requests 包pipenv uninstall --all
卸载所有包- 批量安装?#W
-
Streamline development workflow by loading
.env
files.
-
-
3.查看总环境文件
cat Pipfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17[[source]]
url = "https://pypi.python.org/simple"
verify_ssl = true
name = "pypi"
[packages]
requests = "*"
[dev-packages]
[requires]
-
4.将安装的包设为虚拟环境的依赖
pipenv lock
1
2
3Locking [dev-packages] dependencies…
Locking [packages] dependencies…
Updated Pipfile.lock (7b8df8)! -
5.查看虚拟环境的依赖文件
-
查看文件详细内容
cat Pipfile.lock
-
简单查看
pipenv lock -r
1
2
3
4
5certifi==2018.1.18
chardet==3.0.4
idna==2.6
requests==2.18.4
urllib3==1.22 -
展现美观的依赖图谱
pipenv graph
1
2
3
4
5requests==2.18.4
- certifi [required: >=2017.4.17, installed: 2018.1.18]
- chardet [required: >=3.0.2,<3.1.0, installed: 3.0.4]
- idna [required: >=2.5,<2.7, installed: 2.6]
- urllib3 [required: >=1.21.1,<1.23, installed: 1.22]
-
-
6.激活进入虚拟环境
pipenv shell
-
生成当前环境需求文件
pip freeze
1
2
3
4
5certifi==2018.1.18
chardet==3.0.4
idna==2.6
requests==2.18.4
urllib3==1.22 -
离开虚拟环境
exit
-
-
- #I 移动到项目所在位置:
- => pypa/pipenv: Python Development Workflow for Humans.
readme 的说明及其详细贴心,以下的命令来自自我的实验尝试
- #Q 关键问题: 如何创建新环境? 所谓的开发的环境包括哪些部分?
TL
- 180316 1T NBR-hugh 整理发布