使用find_packages()vs" requirements.txt"对于setup.py脚本

时间:2017-12-14 00:32:59

标签: python pip setuptools python-packaging

我一直在打包python项目,所以我可以在实验室的其他系统上安装它。在我关于如何创建setup.py脚本的研究中,我已经看到了两种方法。

1)使用" pip freeze> requirements.txt"命令;然后"包=' requirements.txt'"在安装脚本中

2)只需使用" packages = find_packages()"在安装脚本中

我的问题是,这两种方法有什么区别?好像" find_packages"与" pip freeze"相同但是在安装没有开始的模块方面没有任何作用。

任何人都可以解释这两种方法有何不同,或者只是解释每种方法的作用,以便我可以就使用哪种方法做出更明智的决定?

谢谢!

1 个答案:

答案 0 :(得分:5)

  

使用“pip freeze> requirements.txt”命令;然后在安装脚本

中“packages ='requirements.txt'”

即使假设packages='requirements.txt'你的意思是packages=open('requirements.txt').read().splitlines(),这绝对是错误的做法,我希望你只是误读了你所咨询的任何来源而不是这样的公然错误信息实际上是在某处发布的。

packages函数的setup()关键字的目的是告诉setuptools在分发和发布时,您的存储库中将包含哪些Python代码目录。安装你的项目。对于大多数简单案例,packages=find_packages()就是您所需要的。

另一方面,

requirements.txt应该包含您的项目依赖的其他人的项目列表(它应该是手工制作而不是将pip freeze重定向到其中切除黑猩猩)。将其内容传递给setup()的正确install_requires关键字,这是导致项目的依赖关系也会在有人安装项目时安装的原因。