我的Python项目使用各种类型的库。如果最终用户没有一个或任何一个协议,该怎么办?
是否应该弹出一个窗口,通知他/她要在他/她的环境中下载哪个软件包和版本?还是我应该在项目中包含这些库?
该怎么做?
答案 0 :(得分:14)
无论您的项目是什么,您都可以尝试将其制作为最终用户将要安装的python软件包。运作方式是
在软件包的根目录中,将包含一个setup.py。您可以在此文件中包含将在最终用户安装软件包时与软件包一起安装的需求/依赖项列表(install_requires
键)。
最终用户可以使用pip安装您的软件包,例如
pip install YourPackage
,将首先安装setup.py中列出的所有依赖项。
此外,正如@Devesh Kumar Singh在his comment中指出的那样,您还可以包含requirements.txt文件。然后,用户可以将该文件与
一起使用进行安装pip install -r requirements.txt YourPackage
请参见this guide for building a python package, setuptools documentation
答案 1 :(得分:5)
要向其他用户显示您的项目需要哪些库,您有多种选择。所有选项都是某种文件,说明该项目需要哪些库。
我知道的文件
答案 2 :(得分:4)
另一个选项:您可以使用PyInstaller将Python应用程序冻结(打包)成独立的可执行文件,在Windows,GNU / Linux,Mac OS X,FreeBSD,Solaris和AIX下。
这对我来说非常有效。实际上,您不必担心最终用户是否安装了Python。
答案 3 :(得分:1)
在这里将python项目打包到模块中非常方便modules
我们包含一个requirements.txt
文件,其中包含该python库所需的所有python模块要求,并在安装模块时自动安装它们。
答案 4 :(得分:1)
所以你做了一个包裹。现在,您将要共享它。接下来是什么?
开发人员
目标-进行分发(也称为“打包”)共享
序言
您现在正在包装包装您的包装,并希望分发它。软件包主要有两种:
twine
传统方式
分发中可能包含几个文件,但主要是以下文件:
setup.py
:指定元数据和进行sdist所需的依赖项。 requirements.txt
:依赖项列表当代方式
使用pyproject.toml
指定用于创建sdist或二进制文件的工具:
用于创建+部署/发布程序包的现代工具包括:
pipenv
:制作一个包并替换requirements.txt
(PyPA推荐)
> pipenv install <dependency>
,> pipenv install
> pipenv -e .
+ twine
poetry
:制作一个程序包并发布到PyPI
> poetry add <dependency>
,> poetry install
> poetry publish
flit
:制作一个程序包并发布到PyPI
> flit install
> flit publish
前两个选项具有创建干净的虚拟环境并使用锁定文件安全安装依赖项的功能。我鼓励稍后探索这些较新的选项,因为它们通过消除setup.py
和setuptools
消除了很多包装难题。
用户
目标-获取一个软件包并安装依赖项
传统方式
应用程序具有多种部署方法,例如将您的应用上传到托管服务,例如heroku,DigitalOcean等。用户可以通过网站,CLI或更多工具间接与您的应用交互。
库通常上载到PyPI。用户通常可以从此处使用pip
安装软件包,而与软件包的制作方式无关:
> pip install <package>
(推荐)> pip install <packatge> -r requirements
(显式,可选)这些命令行调用将从PyPI获取分发,安装软件包和指定的依赖项。
当代方式
以下是pip
的一些替代方法:
pipx
:在隔离的环境中“安全”安装软件包
> pipx install <package>
另请参见
pyproject.toml
和现代包装工具采访B. Cannon