准备一个全新的文件夹 (最好全英文字母且无空格),作为项目文件夹,获得其路径。
然后打开命令行窗口
, 再 cd 刚才的路径
,如果路径中有空格,务必使用引号包裹。如果不清楚刚才文件夹的路径,一般直接将文件夹拖入到命令行窗口,鼠标松掉就会自动填入当前文件夹的路径。
再运行 pipenv --python 2.7
就能创建一个全新的 Python 环境。这个过程一般 20 秒左右就会完成,也可能会有慢点,如果很长时间 (比如超过 5 分钟)仍未成功,可以在确保完全处于世界互联网联网状态或者完全的自然网络下,再尝试。另外,在命令行窗口
中使用快捷键 Control+C
一般可以退出当前的命令运行。
然后,我们要安装下面的 module :
你也可以直接忽略掉指定的版本,比如不是 pipenv install dnslib==0.9.10
,而是直接的 pipenv install dnslib
,没有特殊情况下也是可以的。正常调用某个 module 内的函数,如果报错并提醒出现问题了,那才说明 module 的版本不恰当了。而上面几个 module 是使用比较广泛的,其对应的某些(基本)函数的调用,基本上不大会有版本兼容问题。
安装 module,直接运行 pipenv install 对应的名称
就可以了;之前介绍 pipenv 的时候,也提到过,这个过程可能会比较慢,也可以直接在当前文件夹的路径下,运行 pipenv shell
,进入对应的虚拟环境后,再依次执行 pip install 对应的module名
进行安装。
再次强调,pipenv 的命令行,必然是针对当前文件夹的操作,所以,务必要先 cd 对应的项目文件夹路径
。 (注意:此时的命令是 pip,而不再是 pipenv)
我们把刚才的项目文件夹在 PyCharm 中打开,可以通过顶部菜单 File --> Open...
,会有弹窗出来询问 Open Project
是否新窗口中打开,选择 Open in new window
:
然后对当前 Project 进行配置,主要是选择正确的 Python 解释器,这方面的内容,请参考之前介绍 PyCharm 如何使用的内容。
因为使用了 pipenv 来创建环境,所以,选择 Python 解释器 的时候,可能需要新建一个由 pipenv
支持的解释器,也可能 PyCharm 打开 Project 的时候,自动创建好了,你只需要在 Python 解释器
的列表中选中就可以了。
一台设备是可以开出 6 万多个端口的,而MacOS 上默认一些数值较小的端口 (比如小于 1024 ) 是不允许非管理员
开启的。所谓的端口开启
,是指程序去绑定端口。
DNS 要使用 53 端口 (Amazon 的云服务有一个 Route53 的 DNS 托管服务,当你明白 53 端口有什么用,也就明白了这个产品名的含义了),很明显,这个 53 端口需要管理员才能打开。而我们一般运行程序时,并不是以管理员身份运行的,所以,我们需要将 PyCharm 处于管理员运行的状态,不然将无法直接使用 53 端口。
首先,在操作系统的 Finder 里,然后应用程序 (Application) 中找到 PyCharm 或者 PyCharm CE(版),然后右键点击,在弹出菜单中选择 显示包内容
,然后再依次进入 Contents --> MacOS
。打开 命令行窗口, 输入 sudo
,并空一格,再把刚才 MacOS
内的 pycharm
这个文件拖入到命令行窗口中,当前命令行就会变成 sudo /Applications/PyCharm\ CE.app/Contents/MacOS/pycharm
,敲击回车,系统会询问密码,输入 MacOS 中的账户密码,就会直接运行 PyCharm 了。
sudo
表示使用 admin 账户权限,需要进行账户密码校验,同时,此时的 PyCharm 获得打开 1024 以下的端口号权限了。但需要注意,现在是 admin 用户了,此时对于 PyCharm 来说相当于重装了,所以会弹出一些初始化的窗口,自行确认即可。原来 Project 的配置可能需要重新配置,主要是 Python 的解释器需要重新设定,按照前面章节对 PyCharm 使用方法的介绍,可能需要重新在 PyCharm 内重建一个 pipenv 对应的 Python 解释器
。
包括 modules 也可能需要重新安装,然后很快你会遇到类似下面的问题:
hepochens-MacBook-Pro:cmdtest hepochen$ pipenv shell
Launching subshell in virtual environment…
bash-3.2$ . /Users/hepochen/.local/share/virtualenvs/cmdtest-XejNz_50/bin/activate
(cmdtest) bash-3.2$ pip install dnslib==0.9.10
Collecting dnslib==0.9.10
.......
Successfully built dnslib
Installing collected packages: dnslib
ERROR: Could not install packages due to an EnvironmentError: [Errno 13] Permission denied: '/Users/hepochen/.local/share/virtualenvs/cmdtest-XejNz_50/lib/python2.7/site-packages/dnslib-0.9.10.dist-info'
Consider using the `--user` option or check the permissions.
不要紧张,很多时候,错误信息就是解决方案,此时没有大的必要去用 Google 搜索。比如上文,明确说就是 Permission denied,解决方法的提示是 Consider using the '--user' option or check the permissions
,我们创建的是 虚拟环境, 使用 --user
不合适,那么就剩 permissions
了。
而且根据提示,我们可以推断得到 /Users/hepochen/.local/share/virtualenvs/cmdtest-XejNz_50
就是虚拟环境的根目录,因为使用了 sudo
,这个目录的所有者应该会是 admin,普通用户自然没有权限写入内容到这个目录中。很简单,我们在命令行里运行 sudo chmod -R 777 /Users/hepochen/.local/share/virtualenvs/cmdtest-XejNz_50
,把这个虚拟环境根目录的读写权限全部开放,然后再 pip install xxx
就可以了。
严重注意: 使用 sudo 打开 PyCharm,仅限于 DNS 服务器的开发,其它时候不要这样用,会产生一些潜在的权限问题!!
已经处于 admin 权限下,在 PyCharm 内设定一个 Python 解释器
,可能会触发 PyCharm 调用 pipenv 去新建一个全新的虚拟环境 (即使它已经存在了)。
之前在 非admin
的情况下,命令行窗口直接 pipenv --python 2.7
不过 20 秒左右就完成了,而在 admin 的权限下,这个时间反倒可能变得很长,也不知道是否正常运行,甚至还有可能弹出错误的窗口。
一般的常理,不少人此时会抱怨 pipenv 多烂,甚至这个课程有多不负责任,『在准备的过程中,还这么多问题』……
我们要跳出这个常理,回顾下为什么使用 pipenv?为什么需要一个 Python 的虚拟环境?只要 pipenv 这个工具能解决根本的需求,就是很棒的工具,至于中间有些糟糕的环节也不是大碍,解决它们就好。不求完美的工具,我们自己有能力去改变或者创造,不然,也不会开始学习写代码了。
如果之前都失败了,我们可能需要先清除下之前因为失败而残留的数据,一个是虚拟环境的根目录 (文件夹),比如类似 /Users/hepochen/.local/share/virtualenvs/cmdtest-XejNz_50
,另外一个是项目文件夹内的 Pipfile
文件,这些都需要被删除掉。你可以在 Finder 中进行删除,Finder 里一个快捷键是 Command+G
,可以直接输入路径。你也可以使用命令行操作,比如 sudo rm -rf xxxxx
,但是,sudo
+ rm
对于初学者来说,是很危险的操作!!!!!! 别一不小心,把自己的整个磁盘全部删除了。
现在,再回顾一下,Python 的环境到底是什么?
利用 PyCharm 重复创建一个 pipenv 环境,不过是让 PyCharm 能识别到对应的 Python 解释器
路径而已。那我们能不能直接告诉 PyCharm 新的虚拟环境的解释器路径呢?
获得 pipenv 某个虚拟环境的 Python 解释器路径,可以在命令行窗口中运行 pipenv --py
。
另外,还有先创建再修改的方法,总之,基本原理明白了,方法总比困难多。
在 手工添加
Python 解释器的窗口中,并没有输入路径的地方,可以先添加一个系统默认提供的,然后再在 Project Interpreters
的窗口内,手工修改就可以了。 有一点比较奇怪,系统默认的 /usr/bin/python 添加了也是无法修改路径的,可能也是系统权限的问题,需要添加我们后来安装的 Python 3
(可以 brew install python3
进行安装) 的解释器后再行修改。
你可能会在本节的 『准备』 内容中,手忙脚乱。
甚至遇到了问题,一时半会就是解决不了。
而且,你也清楚,目前还只是准备工作;这都如此麻烦了,后面可还怎么上手呀?
当然,也可能一帆风顺,准备基础环境的过程,非常顺当。
不管怎样,都是好的事情,不用慌张。
我们的重点,一直都在于 如何解决这个问题,而并非这个问题本身。
如果到头来实在搞不定,也不要怀疑自己对计算机的亲和力,大不了不使用虚拟环境,也是一种办法。或者不用 admin 进行 sudo
打开 PyCharm 也是一个办法,就是 Debug 比较麻烦。
了解基本的原理后,遇挫也只是一时的。
有时候,绕开问题本身,也是一种解决方案……