我是Java / Scala开发人员,为工作项目过渡到Python。为了清除我脑中Python方面的蜘蛛网,我编写了一个webapp,在进行本地Docker工作时充当Docker的前端。我现在正在打包它,因此,我正在学习setup.py
和virtualenv。来自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 - 考虑什么"最佳做法"在这种情况下?
答案 0 :(得分:1)
您可以将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的工具。它对部署有很大帮助。
答案 1 :(得分:-1)
Python默认包路径始终指向系统环境,需要管理员访问才能安装。 Virtualenv能够将安装本地化到隔离环境。
对于软件包的部署/分发,您可以选择
python setup.py --install
或pip install <yourpackage>
但是,正如您在顶部注意到的问题:没有virtualenv,他们需要管理员访问权限来安装任何python包。
此外,Pypi包装世界包含一定数量的经过严格测试的包装,并不能开箱即用。
注意:virtualenv itself is actually a hack to achieve isolation。