distutils究竟做了什么?
我看过文档,但还是不太明白。
为什么我必须使用distutils来安装Python模块呢?
为什么我不能直接把模块保存到Python的路径里呢?
3 个回答
你不需要使用distutils来让自己的模块在自己电脑上运行;只要把它们放在你的python路径下就可以了。
当你决定把自己的模块分享给别人使用时,distutils提供了一种标准的方法,让他们可以在自己的电脑上安装你的模块。("dist"在"distutils"中是指分发,意思是把你的软件分发给别人。)
如果你想安装Python包,首先要看看这个包是否在pypi上。如果在的话,你可以直接用下面的命令来安装:
pip install <name_of_package>
如果没有在pypi上,你就需要下载一个.tar.gz格式的文件,看看里面有没有一个叫setup.py的文件,然后用下面的命令来运行它:
python setup.py install
如果你想在开发模式下安装(这样你可以修改包的内容并立即看到效果,而不需要每次都重新安装),可以用下面的命令:
python setup.py develop
这就是分发Python包的常用方法(setup.py);这个setup.py文件会调用一个叫做disutils的工具。
简单来说,distutils是一个帮助开发者创建Python包安装程序的工具。通过运行命令setup.py install,就可以构建并安装一个指定的包。
distutils主要做的事情有:
- 它会自动查找并安装包所需的依赖。
- 它会把包的模块复制到site-packages文件夹里,或者如果是在开发模式下,就创建一个符号链接。
- 你可以用它来创建你包的egg文件。
- 它还可以对你的包进行测试。
- 你可以用它把你的包上传到pypi。
如果你想了解更多细节,可以查看这个链接 http://docs.python.org/library/distutils.html
你并不一定要使用distutils。你可以手动安装模块,就像你手动编译一个C++库一样(编译每个实现文件,然后链接这些.obj文件),或者手动安装一个应用程序(编译、放到自己的目录里、添加一个快捷方式来启动)。不过,这样做会变得很繁琐,而且容易出错,因为每次重复的操作都得手动完成。
而且,我列出的手动步骤其实是比较乐观的——通常你还想做更多的事情。例如,PyQt会把.ui到.py的编译器添加到路径中,这样你就可以通过命令行调用它。
所以你最终会有一堆可以自动化的工作。光这一点就足够说明问题了。
另外,开发者还得写安装说明。如果使用distutils等工具,你只需要说明你的项目包含哪些内容(如果需要的话,还可以加一些额外的功能)——比如,你不需要告诉它把所有东西放到site-packages
的新文件夹里,因为它已经知道该怎么做了。
所以最终,这对开发者和用户来说都更简单。