为 virtualenv 中安装的所有包获取 pip install 命令

Get pip install command for all packages installed inside virtualenv

我在 virtualenv 中部署了一个 Django 应用程序。我现在想将此应用程序移动到另一台服务器,为此我需要将所有必需的 python 软件包安装到新环境。

是否有工具可以创建 pip install 命令来在 virtualenv 中安装所有已安装的软件包?

例如,如果我只在 virtualenv 中安装了 Django 和 Gunicorn,运行所需的工具将输出以下内容:

pip 安装 django==1.6.6。 gunicorn==19.1.0(包括版本)

创建需求:

pip freeze > requirements.txt

安装它们:

pip install -r requirements.txt

激活虚拟环境

$ source .venv/bin/activate

然后运行pip freeze

(.venv)my@ubuntu:~/$ pip freeze
astroid==1.3.4
Babel==1.3
beautifulsoup4==4.3.2
coverage==3.7.1
d2to1==0.2.11
elasticsearch==1.4.0
flake8==2.3.0
netaddr==0.7.13
netifaces==0.10.4
nose==1.3.4
oslo.config==1.6.0
oslo.i18n==1.3.1
oslo.serialization==1.2.0
oslo.utils==1.2.1
pbr==0.10.0
pecan==0.6.1
pep8==1.6.2
pika==0.9.14
prettytable==0.7.2
pyflakes==0.8.1
Pykka==1.2.0
pylint==1.4.1
python-keystoneclient==0.11.2
pytz==2014.10
requests==2.5.0
setuptools-git==1.1
simplegeneric==0.8.1
singledispatch==3.4.0.3
six==1.9.0
stevedore==1.1.0
urllib3==1.10.2
waitress==0.8.9
WebOb==1.4
WebTest==2.0.9
WSME==0.5b6

这将为您提供 venv 中的所有安装包。

第一个活动的虚拟环境

. env/bin/active

获取安装在 virtualenv 中的包列表

pip freeze > list.txt

在另一个环境中,如果你想安装包

pip install -r list.txt

所以你可以写一个小脚本来做这些事情

# -*- coding: utf-8 -*-
import sys
import os
filename = "requirements.txt"

def getlist():
    os.system("pip freeze > %s" %(filename))

def install():
    os.system("pip install -r %s" %(filename))

if __name__ == '__main__':
    if len(sys.argv) <= 1:
        print 'Please choose,list or install'
        exit(0)
    if sys.argv[1] == "list":
        getlist()
    elif sys.argv[1] == "install":
        install()
    else:
        print 'Please input list or install'