设置.py+virtualenv=鸡肉和鸡蛋问题?

2024-09-27 00:23:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个Java/Scala开发人员,正在为一个工作项目过渡到Python。为了去除我大脑中Python端的蛛网,我编写了一个webapp,它在本地Docker工作时充当Docker的前端。我现在正在打包它,因此,正在学习setup.py和virtualenv。pip来自JVM世界,在那里依赖关系并不是“安装”的,而是下载到存储库并在需要时引用,pip处理事情的方式有点陌生。Python生产工作的最佳实践似乎是首先为您的项目创建一个虚拟环境,进行编码工作,然后使用setup.py将其打包。在

我的问题是,当有人需要安装我写的东西时,另一端会发生什么?他们也必须为软件包创建一个虚拟环境,但是如果不检查setup.py文件来确定要使用哪个版本的Python,他们就不知道如何设置它了。我有没有办法创建一个setup.py文件,在安装过程中也创建适当的虚拟环境?如果不是-or if that's considered a "no" as this respondent stated to this SO post-在这种情况下,什么是“最佳实践”?在


Tags: pip文件项目dockerpyvirtualenv开发人员setup
2条回答

您可以将virtualenv看作是使用pip安装的每个包的隔离。这是一种处理不同版本的python和包的简单方法。例如,您有两个项目使用相同的包,但它们的版本不同。因此,通过使用virtualenv,您可以隔离这两个项目并分别安装不同版本的包,而不是在您的工作系统上。在

现在,假设你想和你的朋友一起做一个项目。为了安装相同的包,您必须以某种方式共享项目所依赖的版本和包。如果您要交付一个可重用的包(一个库),那么您需要分发它,这里setup.py有帮助。您可以在Quick Start中了解更多信息

但是,如果您在网站上工作,您只需要将库版本放入一个单独的文件中。最佳实践是为测试、开发和生产创建单独的需求。为了查看文件的格式-写入pip freeze。现在您将看到系统(或virtualenv)上安装的软件包列表。将它放入文件中,您可以稍后在另一台电脑上安装它,使用pip install -r development.txt完全清除virtualenv

还有一件事,请不要把严格版本的软件包,比如pip freeze显示,大多数时候你希望>=至少是X.X版本。好消息是pip自己处理依赖关系。这意味着您不必将依赖包放在那里,pip将对其进行排序。在

谈到部署,您可能需要检查tox,这是一个管理virtualenvs的工具。这对部署有很大帮助。在

Python默认的包路径总是指向需要管理员访问才能安装的系统环境。Virtualenv能够将安装本地化到一个隔离的环境中。在

对于包的部署/分发,您可以选择

  1. 按源代码分发。用户需要运行python setup.py install,或者
  2. 打包python包并上传到Pypi or custom Devpi。因此用户只需使用pip install <yourpackage>

但是,正如您在上面注意到的问题:如果没有virtualenv,他们需要管理员权限来安装任何python包。在

此外,Pypi包worlds还包含一定数量的测试不好的包,这些包不能开箱即用。在

注意:virtualenv itself is actually a hack to achieve isolation。在

相关问题 更多 >

    热门问题