在rhel 6上的虚拟python环境(virtualenv或pyvenv)中安装rpm包,无法访问Internet

时间:2015-04-16 17:11:23

标签: python django pip rhel

我的RHEL服务器只能访问我的IT预先批准的软件包。我正在开发一个将在此服务器上托管的Python应用程序。目前,我已经设法在不同的位置(/ usr / local / bin)构建最新版本的python。我能够创建虚拟环境,将其与系统的其他部分隔离开来。

现在,我需要在环境中使用pip安装软件包以使应用程序正常工作,例如。 Django的。由于IT已禁用每次访问互联网,因此我无法执行pip install package_name。好吧,我可以,但它试图从互联网下载包,并超时。当我下载django软件包的rpm并尝试在虚拟环境中安装它时,它会失败:

(envtest) [root@arlwebimgakp02 envtest]# rpm -ivh python3-django-1.7.2-1.fc22.noarch.rpm
error: Failed dependencies:
        /usr/bin/python3 is needed by python3-django-1.7.2-1.fc22.noarch
        python(abi) = 3.4 is needed by python3-django-1.7.2-1.fc22.noarch
        python-django-bash-completion = 1.7.2-1.fc22 is needed by python3-django-1.7.2-1.fc22.noarch
        python3 is needed by python3-django-1.7.2-1.fc22.noarch

因此看起来rpm安装正在寻找来自python(2.6.6)的通用安装的依赖项,而不是在虚拟环境中使用的单独编译的3.4.3。我甚至可以这样做吗?我可以将rpm包安装到虚拟环境中吗?如何在我的虚拟环境中安装我的python软件包而无需访问服务器的Internet?

3 个答案:

答案 0 :(得分:0)

RPM是系统级别的包管理器。它将检查它的内部数据库是否存在依赖关系。不检查可执行文件 python 是否存在但是否存在包 python

您需要下载Django-1.8.tar.gz,复制到linux机器和

pip install Django-1.8.tar.gz

答案 1 :(得分:0)

你需要说服你的IT部门python包是一件好事,就像rpms一样。然后,您可以直接从pypi.python.org下载或使用pip来构建所需包的目录:

pip install --download=/path/to/pypi/repo django

然后,在你的virtualenv中你做

pip install --no-index --find-links=/path/to/pypi/repo django

由于您的IT部门很有帮助且开明,您甚至可以说服他们安装devpi之类的pypi缓存,以便更轻松地部署到您的同事身上。

答案 2 :(得分:0)

首先,您不能在virtualenv中安装RPM。 virtualenv仅影响pip安装的Python软件包。

您可以做的是使用另一台可以访问Internet的计算机下载所需的Python软件包并将其上传到服务器上进行安装。您可以指定软件包用于的Python版本,如果有的话甚至可以使用需求文件。例如,如果您想安装适用于Python 3.5的最新版本的Django,则可以执行以下操作:

# On your machine with internet access
pip download --python-version "3.5" --only-binary=:all: Django

这将下载一系列.whl文件。将所有这些都上传到您的服务器,然后在服务器上的virtualenv中运行以下命令:

pip install *.whl