Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

3.7 Python 基础语法之模块 #6

Open
ShannonChenCHN opened this issue Jul 11, 2018 · 4 comments
Open

3.7 Python 基础语法之模块 #6

ShannonChenCHN opened this issue Jul 11, 2018 · 4 comments

Comments

@ShannonChenCHN
Copy link
Owner

ShannonChenCHN commented Jul 11, 2018

日期:2018.07.12 周四

  • 使用模块
  • 安装第三方模块
@ShannonChenCHN
Copy link
Owner Author

ShannonChenCHN commented Jul 12, 2018

模块(Module)

在Python中,一个.py文件就称之为一个模块(Module)。

使用模块的好处:

  • 把代码分散到不同的文件中,大大提高了代码的可维护性;
  • 提高代码复用性,在编写程序的时候,可以引用其他模块,包括Python内置的模块和来自第三方的模块;
  • 使用模块还可以避免函数名和变量名冲突,相同名字的函数和变量完全可以分别存在不同的模块中。

创建模块时的注意点:

  • 模块名要遵循Python变量命名规范,不要使用中文、特殊字符;
  • 模块名不要和系统模块名冲突,最好先查看系统是否已存在该模块,检查方法是在Python交互环境执行import 你的模块名,若成功则说明系统存在此模块。

包(Package)

为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package)。

比如,按照如下目录存放文件时:

mycompany
├─ __init__.py
├─ abc.py
└─ xyz.py

mycompany 就是一个包,abc.py 模块的名字就变成了 mycompany.abc,类似的,xyz.py 的模块名变成了mycompany.xyz

如何创建包?

  • 每一个包目录下面都会有一个 __init__.py 的文件,这个文件是必须存在的,否则,Python 就把这个目录当成普通目录,而不是一个包。
  • __init__.py可以是空文件,也可以有Python代码,因为__init__.py本身就是一个模块,而它的模块名就是其所在的目录名。

延伸阅读

@ShannonChenCHN
Copy link
Owner Author

ShannonChenCHN commented Jul 12, 2018

访问权限

  • 特殊变量:在 Python 中,类似 __xxx__ 这样的变量就是特殊变量。比如,文件头部的 __author__
  • 私有函数:在 Python 中,类似 _xxx__xxx 这样的函数或变量就是私有的(private)。比如,_name__status
  • 外部不需要引用的函数全部定义成private,只有外部需要引用的函数才定义为public。

注:private函数和变量“不应该”被直接引用,而不是“不能”被直接引用,是因为Python并没有一种方法可以完全限制访问private函数或变量,但是,从编程习惯上不应该引用private函数或变量。

@ShannonChenCHN
Copy link
Owner Author

ShannonChenCHN commented Jul 12, 2018

包管理工具

easy_install

easy_install 作为 setuptools的一部分,发布于 2004 年,当时是主流的包管理工具。

使用示例:

easy_install bs4

pip

pip 是 2008 年面世的,相比 easy_install,更推荐使用 pip 安装第三方模块。

Mac或Linux上有可能并存Python 3.x和Python 2.x,因此对应的pip命令是pip3。在命令提示符窗口下尝试运行pip3命令,可以看到提示。

一般来说,第三方库都会在 Python Package 官方网站 PyPI 上注册,要安装一个第三方库,必须先知道该库的名称,可以在官网或者 PyPI 上搜索,比如 Pillow 的名称叫 Pillow,因此,安装Pillow的命令就是:

pip3 install Pillow

类似于 CocoaPods 的 podfile,pip 可以通过 requirements.txt 来安装依赖,推荐使用 bndr/pipreqs 来生成 requirements.txt 文件。

注:默认情况下,pip 安装第三方模块时,只会安装在当前应用独立的虚拟环境(virtualenv)下,而不是全局(system wide)的。

Anaconda

当要使用的第三方库比较多时,用pip一个一个安装费时费力,还需要考虑兼容性。我们推荐直接使用Anaconda,这是一个基于Python的数据处理和科学计算平台,它已经内置了许多非常有用的第三方库,我们装上Anaconda,就相当于把数十个第三方模块自动安装好了,非常简单易用。

FAQ

  1. 用 pip 安装第三方库时,报错超时:
ReadTimeoutError: HTTPSConnectionPool(host='pypi.python.org', port=443): Read timed out.

解决办法:

sudo pip install --default-timeout=100 <package_name>

参考: How to solve ReadTimeoutError: HTTPSConnectionPool(host='pypi.python.org', port=443) with pip?

参考

@ShannonChenCHN
Copy link
Owner Author

ShannonChenCHN commented Jul 12, 2018

模块搜索路径

默认搜索规则

默认情况下,Python解释器会搜索当前文件所在目录、所有已安装的内置模块和第三方模块,搜索路径存放在sys模块的path变量中。可以通过 sys.path 来查看:

import sys
print(sys.path)

输出结果:

['/Users/xianglongchen/Desktop/GitHubRepo/APythonTour/Modules/package_2', '/Users/xianglongchen/Desktop/GitHubRepo/APythonTour', '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python37.zip', '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7', '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload', '/usr/local/lib/python3.7/site-packages']

添加自定义搜索路径

如果我们要添加自己的搜索目录,有两种方法:

  • 直接修改 sys.path,添加要搜索的目录;
  • 设置环境变量PYTHONPATH。

延伸阅读

@ShannonChenCHN ShannonChenCHN changed the title 模块 3.7 Python 基础语法之模块 Jul 16, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant