对于 setup.py 脚本使用 find_packages() 与 "requirements.txt" 之间的区别

Difference between using find_packages() vs "requirements.txt" for setup.py script

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

1) 使用"pip freeze > requirements.txt"命令;然后 "packages='requirements.txt'" 在设置脚本中

2) 只需在设置脚本中使用 "packages=find_packages()"

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

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

谢谢!

use "pip freeze > requirements.txt" command; then "packages='requirements.txt'" in the setup script

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

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

另一方面,

requirements.txt 应该包含您的项目所依赖的其他人的项目列表(并且它应该真正是手工制作的而不是将 pip freeze 重定向到其中就像一只被切除脑叶的黑猩猩)。将其内容传递给的正确 setup() 关键字是 install_requires,这导致每当有人安装您的项目时,您的项目的依赖项也会被安装。