10.1.3 让模块可用
1. 将模块放在正确的位置
将模块放在正确的位置很容易,只需找出Python解释器到哪里去查找模块,再将文件放在这个地方即可。在你使用的计算机中,如果Python解释器是管理员安装的,而你有没有管理员权限,就可能无法将模块保存到Python使用的目录中。在这种情况下,需要采用随后要介绍的另一种解决方案:告诉解释器去哪里查找。
你可能还记得,可在模块sys的变量path中找到目录列表(即搜索路径)。
>>> import sys, pprint
>>> pprint.pprint(sys.path)
['C:\\Python35\\Lib\\idlelib',
'C:\\Python35',
'C:\\Python35\\DLLs',
'C:\\Python35\\lib',
'C:\\Python35\\lib\\plat-win',
'C:\\Python35\\lib\\lib-tk',
'C:\\Python35\\lib\\site-packages']
提示 如果要打印的数据结构太大,一行容纳不下,可使用模块pprint中的函数pprint(而不是普通print语句)。 pprint是个卓越的打印函数,能够更妥善地打印输出。
当然,你得到的打印结果可能与这里显示的不完全相同。这里的要点是,每个字符串都表示一个位置,如果要让解释器能够找到模块,可将其放在其中任何一个位置中。虽然放在这里显示的任何一个位置中都可行,但目录site-packages是最佳的选择,因为它就是用来放置模块的。请在你的计算机中查看sys.path,找到目录site-packages,并将代码清单10-4所示的模块保存到这里,
但要使用另一个名称,如another_hello.py。然后,尝试像下面这样做:
>>> import another_hello
>>> another_hello.hello()
Hello, world!
只要模块位于类似于site-packages这样的地方,所有的程序就都能够导入它。
2. 告诉解释器到哪里去查找
将模块放在正确的位置可能不是合适的解决方案,其中的原因很多。
不希望Python解释器的目录中充斥着你编写的模块。
没有必要的权限,无法将文件保存到Python解释器的目录中。
想将模块放在其他地方。
最重要的是,如果将模块放在其他地方,就必须告诉解释器到哪里去查找。前面说过,要告诉解释器到哪里去查找模块,办法之一是直接修改sys.path,但这种做法不常见。标准做法是将模块所在的目录包含在环境变量PYTHONPATH中。
环境变量PYTHONPATH的内容随操作系统而异(参见旁注“环境变量”),但它基本上类似于sys.path,也是一个目录列表。
环境变量
环境变量并不是Python解释器的一部分,而是操作系统的一部分。大致而言,它们类似
于Python变量,但是在Python解释器外面设置的。如果你使用的是bash shell(在大多数类
UNIX系统、 macOS和较新的Windows版本中都有),就可使用如下命令将~/python附加到环境
变量PYTHONPATH末尾:
export PYTHONPATH=$PYTHONPATH:~/python
如果要对所有启动的shell都执行这个命令,可将其添加到主目录中的.bashrc文件中。关
于如何以其他方式编辑环境变量,请参阅操作系统文档。
除使用环境变量PYTHONPATH外,还可使用路径配置文件。这些文件的扩展名为.pth,位于一些特殊目录中,包含要添加到sys.path中的目录。有关这方面的详细信息,请参阅有关模块site的标准库文档。
领取专属 10元无门槛券
私享最新 技术干货