Python环境配置

简介:

Python作为Google的第三大开发语言、Dropbox的基础语言已经已经越来越得到人们的喜爱,尤其是运维人员,而且很多优秀的运维工具都是Python开发的,引用Python作者的一句话:人生苦短,我用Python。

下面我就和大家简单分享下我在用Python进行开发时使用的一些Python配置方面的小工具。

Python版本管理

我以前使用pythonbrew来管理我的开发机上面多个Python解析器,现在我使用pyenv来管理我的Python解析器,github地址,安装和使用直接见github里面的README就行了,用起来还是比较简单的,通过pyenv可以管理多个Python版本并共存,随时切换想要使用的版本,且这个工具本身不依赖于Python。

环境依赖

根据12Factor规则,应用程序要显示的声明依赖,这里我能想到的一个很好的例子是Ruby的Gemfile,这个文件里面声明了一个Ruby应用程序所依赖的所有依赖,Gemfile就是对Ruby程序的依赖声明,在Python里面对依赖进行声明我想到了pip。

依赖申明好了,不同的应用程序间如何进行依赖隔离呢,同样Ruby程序是用bundle exec,这里为什么要提Ruby,那时因为我以前配置一个Ruby应用程序感觉非常方便,直接执行script/bootstarp所有依赖都安装好了,基本直接运行程序就能跑了。

其实Python里面也有一个非常好的依赖隔离的东西virtualenv,下面简单介绍下基于virtualenv写了一个简单的Python项目类似Ruby的bundle的小工具。

Virtualenv Exec(ve)

源代码如下:

#!/bin/bash

if [[ $# -le 0 ]]; then
    echo "Usage: `basename $0` <command> [agrument]..."
fi

if [ -r "$HOME/.verc" ]; then
    source "$HOME/.verc"
fi

if [ -z "$VIRTUALENV_DIR" ]; then
    VIRTUALENV_DIR=".virtualenv"
fi

DIR=`pwd`
for (( ;; ))
do
    if [ -r "$DIR/$VIRTUALENV_DIR/bin/activate" ]; then
        source "$DIR/$VIRTUALENV_DIR/bin/activate"
        if [ -n "$VIRTUAL_ENV" ]; then
            break
        fi
    fi
    if [ "$DIR" == "/" ]; then
        break
    fi
    DIR=`dirname $DIR`
done

if [ -z "$VIRTUAL_ENV" ]; then
    echo "virtualenv: not found"
    echo
    exit 1
else
    if [ "$1" == "-v" ]; then
        echo "virtualenv: $VIRTUAL_ENV"
        echo
        shift
    fi
    exec $@
fi

bootstrap.py

源代码如下:

# -*- coding: utf-8 -*-

if __name__ == '__main__':
    exit(1)

import os
import subprocess
import logging
import hashlib
import stat

logger = logging.getLogger(__name__)

class Bootstrap(object):
    working_dir = None
    bootstrap_dir = None
    virtualenv_dir = None


    def __init__(self, working_dir=None):
        self.working_dir = working_dir or os.getcwd()
        self.bootstrap_dir = self._config_dot_dir('BOOTSTRAP_DIR', '.bootstrap')
        self.virtualenv_dir = self._config_dot_dir('VIRTUALENV_DIR', '.virtualenv')

        if not os.path.isdir(self.bootstrap_dir):
            os.makedirs(self.bootstrap_dir)

        logger.debug('working_dir: %s', self.working_dir)
        logger.debug('bootstrap_dir: %s', self.bootstrap_dir)
        logger.debug('virtualenv_dir: %s', self.virtualenv_dir)

        self.install_virtualenv()
        self.install_ve()


    def _config_dot_dir(self, env_name, default_value=None):
        value = os.environ.get(env_name)
        if not value:
            return '%s/%s' % (self.working_dir, default_value)

        logger.debug('config %s from envron', env_name)
        if os.path.isabs(value):
            return value
        else:
            return '%s/%s' % (self.working_dir, value)


    def install_virtualenv(self):
        if os.path.isfile('%s/%s' % (self.virtualenv_dir, 'bin/activate')):
            return

        executable = None
        try:
            executable = subprocess.check_output(['command', '-v', 'virtualenv-12.0.7/virtualenv.py'])
            if not type(executable) is str:
                # convert from bytes to str (unicode) under python3
                executable = executable.decode()
            executable = executable.strip()
        except:
            pass

        if not executable:
            virtualenv_tar = '%s/%s' % (self.bootstrap_dir, 'virtualenv.tar.gz')
            executable = '%s/%s' % (self.bootstrap_dir, 'virtualenv-12.0.7/virtualenv.py')
            self.download('http://mirrors.aliyun.com/pypi/packages/source/v/virtualenv/virtualenv-12.0.7.tar.gz', 
                         virtualenv_tar, 'e08796f79d112f3bfa6653cc10840114')
            os.system('tar -zxvf "%s" -C "%s"' % (virtualenv_tar, self.bootstrap_dir))

        os.chdir(self.bootstrap_dir)
        try:
            os.system('%s --distribute --no-site-packages "%s"' % (executable, self.virtualenv_dir))
        finally:
            os.chdir(self.working_dir)


    def download(self, source, target, hashing=None):
        #if hashing and os.path.isfile(target) and hashing == self.md5sum(target):
            #return
        if os.system('wget "%s" -O "%s"' % (source, target)) == 0:
            return
        if os.system('curl "%s" -o "%s"' % (source, target)) == 0:
            return

        logger.error('Unable to download "%s"' % source)
        raise RuntimeError


    def mark_executable(self, path):
        st = os.stat(path)
        os.chmod(path, st.st_mode | stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH)


    def md5sum(self, filename):
        return hashlib.md5(open(filename, 'rb').read()).hexdigest()


    def install_ve(self):
        executable = '%s/%s' % (self.bootstrap_dir, 've')
        self.download('https://raw.github.com/baijian/ve/v1.1/ve',
                executable, 'fd0f0601c6732ca9a5b3b62e691d68cb')
        self.mark_executable(executable)


    def ve(self, cmd):
        os.system('%s/%s %s' % (self.bootstrap_dir, 've', cmd))


_bootstrap = None

__all_ = ['bootstrap', 've']

def bootstrap(working_dir=None):
    global _bootstrap
    _bootstrap = Bootstrap(working_dir)

def ve(cmd):
    global _bootstrap
    if not _bootstrap:
        bootstrap()
    _bootstrap.ve(cmd)

开始使用

  • 创建项目目录
mkdir project && mkdir project/script && cd project
  • 编写脚手架
#!/usr/bin/env python
# -*- coding: utf8 -*-

import os
source = "https://raw.github.com/baijian/bootstrap.py/v1.2/bootstrap.py"
target = "%s/bootstrap.py" % os.path.dirname(os.path.abspath(__file__))
if not os.path.isfile(target):
    os.system("wget '%s' -O %s" % (source, target))


from bootstrap import bootstrap, ve
bootstrap(os.path.dirname(os.path.abspath(__file__)) + "/..")

ve("pip install requests==2.4.1")
  • 修改依赖申明(可选)

编辑并修改script/bootstrap文件

  • 安装项目依赖
script/bootstrap
  • 查看项目依赖
ve pip freeze
  • 查看项目使用的Python解析器
ve command -v python

其他

如果要使用Python进行web应用的开发,可以选用的框架诸如Flask、Django、Tornado、web.py,提到web.py,想到了互联网之子亚伦·斯沃茨,有兴趣可以看看他的视频~

还有一些有些的优秀的Python运维工具诸如:Ansible、Saltstack、Fabric、Supervisord等,Python的开源模块的质量非常高,这也是我喜欢Python的一个很重要的原因。

目录
相关文章
|
PyTorch Linux 算法框架/工具
pytorch学习一:Anaconda下载、安装、配置环境变量。anaconda创建多版本python环境。安装 pytorch。
这篇文章是关于如何使用Anaconda进行Python环境管理,包括下载、安装、配置环境变量、创建多版本Python环境、安装PyTorch以及使用Jupyter Notebook的详细指南。
3158 1
pytorch学习一:Anaconda下载、安装、配置环境变量。anaconda创建多版本python环境。安装 pytorch。
|
Python
在VScode环境下配置Python环境的方法
经过上述步骤,你的VSCode环境就已经配置好了。请尽情享受这扇你为自己开启的知识之窗。如同你在冒险世界中前行,你的探索之路只有越走越广,你获得的知识只会越来越丰富,你的能力只会越来越强。
1455 37
|
人工智能 安全 Shell
Jupyter MCP服务器部署实战:AI模型与Python环境无缝集成教程
Jupyter MCP服务器基于模型上下文协议(MCP),实现大型语言模型与Jupyter环境的无缝集成。它通过标准化接口,让AI模型安全访问和操作Jupyter核心组件,如内核、文件系统和终端。本文深入解析其技术架构、功能特性及部署方法。MCP服务器解决了传统AI模型缺乏实时上下文感知的问题,支持代码执行、变量状态获取、文件管理等功能,提升编程效率。同时,严格的权限控制确保了安全性。作为智能化交互工具,Jupyter MCP为动态计算环境与AI模型之间搭建了高效桥梁。
1030 2
Jupyter MCP服务器部署实战:AI模型与Python环境无缝集成教程
|
Shell Linux Ruby
Python3虚拟环境venv
`venv` 是 Python 的虚拟环境工具,用于为不同项目创建独立的运行环境,避免依赖冲突。通过 `python3 -m venv` 命令创建虚拟环境,并使用 `source bin/activate` 激活。激活后,所有 Python 包将安装在该环境中,不影响系统全局环境。退出环境使用 `deactivate` 命令。每个虚拟环境拥有独立的包集合,确保项目间的隔离性。删除虚拟环境只需删除其目录即可。
1966 34
|
Java API Docker
在线编程实现!如何在Java后端通过DockerClient操作Docker生成python环境
以上内容是一个简单的实现在Java后端中通过DockerClient操作Docker生成python环境并执行代码,最后销毁的案例全过程,也是实现一个简单的在线编程后端API的完整流程,你可以在此基础上添加额外的辅助功能,比如上传文件、编辑文件、查阅文件、自定义安装等功能。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
在线编程实现!如何在Java后端通过DockerClient操作Docker生成python环境
|
SQL 分布式计算 数据处理
云产品评测|分布式Python计算服务MaxFrame | 在本地环境中使用MaxFrame + 基于MaxFrame实现大语言模型数据处理
本文基于官方文档,介绍了由浅入深的两个部分实操测试,包括在本地环境中使用MaxFrame & 基于MaxFrame实现大语言模型数据处理,对步骤有详细说明。体验下来对MaxCompute的感受是很不错的,值得尝试并使用!
510 1
|
IDE 网络安全 开发工具
IDE之pycharm:专业版本连接远程服务器代码,并配置远程python环境解释器(亲测OK)。
本文介绍了如何在PyCharm专业版中连接远程服务器并配置远程Python环境解释器,以便在服务器上运行代码。
7572 0
IDE之pycharm:专业版本连接远程服务器代码,并配置远程python环境解释器(亲测OK)。
|
Shell 程序员 开发者
轻松搞定在Python中构建虚拟环境
本教程教你如何使用业界公认的最佳实践,创建一个完全工作的Python开发环境。虚拟环境通过隔离依赖项,避免项目间的冲突,并允许你轻松管理包版本。我们将使用Python 3的内置`venv`模块来创建和激活虚拟环境,确保不同项目能独立运行,不会相互干扰。此外,还将介绍如何检查Python版本、激活和停用虚拟环境,以及使用`requirements.txt`文件共享依赖项。 通过本教程,你将学会: - 创建和管理虚拟环境 - 避免依赖性冲突 - 部署Python应用到服务器 适合新手和希望提升开发环境管理能力的开发者。
1230 2
|
机器学习/深度学习 缓存 PyTorch
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
这篇文章是关于如何下载、安装和配置Miniconda,以及如何使用Miniconda创建和管理Python环境的详细指南。
10865 0
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
|
Python
探索Python虚拟环境:virtualenv、venv与pipenv比较
在Python开发中,有效的环境管理至关重要。virtualenv、venv和pipenv是常用的虚拟环境管理工具。virtualenv支持Python 2.7+和3.3+,可创建独立环境;venv为Python 3.3+内置库,简单轻量但功能有限;pipenv则结合了包管理和虚拟环境管理,生成Pipfile.lock确保依赖确定性和安全性,推荐作为首选工具。
807 2

推荐镜像

更多