在当今的软件开发环境中,由于程序员用来构建项目的各种环境,确保成功的项目部署可能具有挑战性。每个环境都面临着从Windows到Archlinux,Mac到Ubuntu的项目部署的独特挑战。
开发人员面临的一个主要挑战是环境依赖性冲突,这可能会导致部署后的项目故障。尽管Docker解决了这个问题,但其复杂的设置要求使许多开发人员无法访问。
本教程通过演示如何根据项目运行的环境动态安装Python依赖性来提供解决方案。
先决条件
只有对Python和Git的基本了解,任何开发人员都可以遵循本教程中概述的方法以提高其项目的部署成功。
本教程安装的唯一要求是Python。要安装Python,请访问其正式下载页面。
问题是什么?
将Postgres数据库与Django一起使用时,Psycopg2数据库适配器是需要使用的依赖性。但是存在问题,PsyCopG2将成功安装在Windows环境上,但不会在Linux环境上,您需要安装Psycopg2-Binary。
好吧,如果您的开发和部署环境相似,或者您使用Docker,则您不会在这种情况下遇到问题。当您有不同的环境或与您一起工作的多个合作者时,就会发生问题。您不希望他们编辑要求。txt文件,以免引起git冲突。
该问题如何解决?
今天将共享两种主要方法,以帮助您根据环境或Python版本动态安装Python依赖。
有条件的PIP要求语法
假设您的需求中列出的依赖项。txt文件如下:
requests==2.26.0
six==1.16.0
urllib3==1.26.7
psycopg2==2.9.6
可以修改以确保在Linux环境上安装需求时,将安装Linux所需的数据库适配器。
requests==2.26.0
six==1.16.0
urllib3==1.26.7
psycopg2-binary==2.9.3; sys_platform == "linux"
psycopg2==2.9.6; sys_platform == "win32"
您还可以根据安装在环境上的Python版本安装要安装的依赖项。
requests==2.26.0; python_version > '3.0'
requests==2.26.0; python_version == '2.6'
six==1.16.0
urllib3==1.26.7
psycopg2-binary==2.9.3; sys_platform == "linux"
psycopg2==2.9.6; sys_platform == "win32"
它们在PEP 508和PEP 0345(环境标记)中定义,但该语法似乎遵循PEP 0496。
要了解sys_platform
,
的所有可能值,请访问此stackoverflow答案。
现在,当您运行pip install -r requirements.txt
时,根据您的环境,将安装适当的依赖项和版本。
这是基于环境或python版本动态安装依赖项的最简单和推荐的方法。
Python安装脚本
您可以根据环境或python版本创建一个安装脚本以安装依赖项。
-
在您的项目的根目录中创建文件install.py
import pip _all_ = ( "requests==2.26.0", "six==1.16.0", "urllib3==1.26.7", ) # All platforms windows = ("psycopg2==2.9.6",) # Windows linux = ("psycopg2-binary==2.9.3",) # Linux darwin = [] # MacOS def install(packages): print("Installing packages: {}".format(packages)) for package in packages: pip.main(['install', package]) if __name__ == '__main__': from sys import platform print("Platform: {}".format(platform)) install(_all_) if platform == 'win32': install(windows) if platform.startswith('linux'): install(linux) if platform == 'darwin': install(darwin) print("Completed installation of packages.")
此脚本通过检查程序在使用Python内置SYS软件包时运行的平台来工作。因此,它通过通过脚本调用pip
来安装该平台的定义依赖关系。该方法更加复杂且耗时,但它为您提供了程序控制流的更多控制和灵活性。
-
运行程序安装软件包
python install.py
结论
总而言之,在部署项目时,矛盾的环境依赖关系对于软件开发人员而言可能是一个巨大的头痛。幸运的是,有几种解决方案可用,包括Docker和基于环境的依赖关系的动态安装。在本文中,我们提供了两种不同的方法来基于环境动态安装Python依赖性,这可以帮助避免冲突并确保项目在不同平台上平稳运行。这些方法使开发人员可以节省时间,减少错误并专注于构建出色的软件。我希望本文有助于提供用于管理Python项目中环境依赖性的有用技巧和技巧。
感谢您的阅读,我也很喜欢在Twitter与您建立联系| LinkedIn | GitHub | Portfolio。 ðρ