distutils究竟做了什么?

5 投票
3 回答
1322 浏览
提问于 2025-04-16 05:53

我看过文档,但还是不太明白。

为什么我必须使用distutils来安装Python模块呢?

为什么我不能直接把模块保存到Python的路径里呢?

3 个回答

2

你不需要使用distutils来让自己的模块在自己电脑上运行;只要把它们放在你的python路径下就可以了。

当你决定把自己的模块分享给别人使用时,distutils提供了一种标准的方法,让他们可以在自己的电脑上安装你的模块。("dist"在"distutils"中是指分发,意思是把你的软件分发给别人。)

4

如果你想安装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

5

你并不一定要使用distutils。你可以手动安装模块,就像你手动编译一个C++库一样(编译每个实现文件,然后链接这些.obj文件),或者手动安装一个应用程序(编译、放到自己的目录里、添加一个快捷方式来启动)。不过,这样做会变得很繁琐,而且容易出错,因为每次重复的操作都得手动完成。

而且,我列出的手动步骤其实是比较乐观的——通常你还想做更多的事情。例如,PyQt会把.ui到.py的编译器添加到路径中,这样你就可以通过命令行调用它。

所以你最终会有一堆可以自动化的工作。光这一点就足够说明问题了。

另外,开发者还得写安装说明。如果使用distutils等工具,你只需要说明你的项目包含哪些内容(如果需要的话,还可以加一些额外的功能)——比如,你不需要告诉它把所有东西放到site-packages的新文件夹里,因为它已经知道该怎么做了。

所以最终,这对开发者用户来说都更简单。

撰写回答