我的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?
答案 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