如何在项目中管理Python依赖?
假设有个开发者在做一个项目的时候,发现需要用到某个软件包。他就用pip来安装这个软件包。安装完之后,这个开发者会把它写进requirements
文件或者setup.py
里,作为项目的依赖吗?
如果这个开发者忘记把项目的所有依赖都写下来(或者因为经验不足,不知道要写),那他该怎么办呢?
我想问的是,使用PyPi上外部软件包时,通常的工作流程是什么样的?
2 个回答
这要看你在做什么项目。
如果你在开发一个库(也就是别人可以用的代码),你应该把依赖的库写在 setup.py
文件里。这样的话,当你把这个库放到 PyPi 上时,别人安装的时候就能自动安装这些依赖。
如果你是在做一个 Python 应用(可能是个网页应用),那么用 requirements.txt
文件会更方便。你可以把所有代码复制到需要的地方,使用 virtualenv 或 pyvenv 创建一个虚拟环境,然后运行 pip install -r requirements.txt
来安装依赖。(其实在开发的时候也应该这样做,这样就不会在全局环境里搞得一团乱了)。
在你安装完包后,立刻把它们写进 requirements.txt
文件里,肯定比到最后再去想需要哪些包要简单得多。我通常的做法是先把包写到文件里,然后再用 pip install -r
来安装。
如果你忘了自己安装了哪些包,pip freeze
可以帮你找出来,但你还是应该查看它生成的文件,确保里面的东西你都需要。如果你使用 virtualenv,结果会比在全局环境中安装要好。
这个命令:
pip freeze > requirements.txt
会把你当前Python环境中所有的依赖项(也就是你安装的库)复制到一个叫做requirements.txt的文件里。你可以在这里了解更多信息:http://pip.readthedocs.org/en/latest/reference/pip_freeze.html