【发布时间】:2018-05-28 00:04:18
【问题描述】:
我一直在打包一个 python 项目,以便我可以在实验室的其他系统上安装它。在我对如何创建 setup.py 脚本的研究中,我看到了两种方法。
1) 使用“pip freeze > requirements.txt”命令;然后设置脚本中的“packages='requirements.txt'”
2) 只需在设置脚本中使用“packages=find_packages()”
我的问题是,这两种方法有什么区别?似乎“find_packages”与“pip freeze”的作用相同,但在安装没有开始的模块方面没有任何作用。
谁能解释这两种方法的不同之处,或者只是解释每种方法的作用,以便我可以更明智地决定使用哪种方法?
谢谢!
【问题讨论】:
-
仅供参考,我建议您咨询 packaging.python.org/tutorials/distributing-packages 了解所有 Python 打包研究。
-
“看起来“find_packages”和“pip freeze”是一样的”——是什么让你这么认为?他们做完全正交的事情。
-
从我所读到的内容来看,我说它“似乎”是一样的,这就是为什么我认为我没有正确理解它的原因。我的理解是,“pip freeze”会为项目中使用的所有模块创建一个“图像”,并将它们放在以后可以在安装时使用的列表中。 “Find_packages”(再说一遍,我是怎么理解的)用“init”文件查找项目中的所有模块,然后......??这是我无法理解差异的地方; find_packages 找到这些包后如何处理它们?
-
pip freeze列出了 pip 在当前环境中安装的所有 Python 项目(PyPI 上的东西)。find_packages()检查并描述您正在构建的项目的目录结构;它遍历当前目录查找包含__init__.py文件的文件夹和子文件夹,并返回["package", "package.subpackage", "package.other_subpackage", "package.other_subpackage.subsubpackage", "etc"]形式的列表。 -
好的,那么它是否将包列表存储在某个地方,以便我安装项目的下一个系统知道项目需要哪些包并可以找到它们?还是我必须在项目中包含这些包,以便 find_packages 可以直接从目录中找到并安装它们?
标签: python pip setuptools python-packaging