如果你选择离线安装Python的模块包,并且,你的Python版本还比较老的话,那么模块包之间的依赖关系,可能会让你崩溃。

今天我就遇到了这么一个情况:

在RHEL6的默认Python2.6.6上安装elasticsearch的模块包

要完成这个任务,相关联的几个软件包其实都是有最新版的:

  1. python 2.7.9
  2. pip 19
  3. elasticsearch 7.0.4

但是,最新的版本,可能并不是适合的;
你可以在pypi.python.org的项目页上看到它们对软件版本的需求,最新版基本上是适用于:

  1. python 2.7 / 3.6

所以,如果没有注意到这些细节,那么不论是通过:

  1. python setup.py install
  2. pip xxx.whl

你都极有可能会遇到各种问题。


反正,最后,问题我解决了,并且写了一个SHELL脚本,因为浪费时间在依赖包上太折磨人了。

使用我的脚本之前,你需要下好依赖包;

依赖程序在脚本中的变量定义部分有说明,或者,你直接看我的下图:

红框标注的部分就是需要下载的依赖包,这些在PYPI上都可以下得到。

接下来就是看看我的SHELL脚本了:

#!/bin/bash
# Python 2.6.6
# Add Modules: elasticsearch

# ==================
# variables

# whereis install media
path_install_media="/software"
path_unzip="/software"

file_install_log="python_2.6.6_install_media_elasticsearch.log"

software_setuptools=$path_install_media"/setuptools-2.0.tar.gz"
software_pip=$path_install_media"/pip-9.0.2.tar.gz"
software_urllib3=$path_install_media"/urllib3-1.21.1-py2.py3-none-any.whl"
software_elasticsearch=$path_install_media"/elasticsearch-6.0.0-py2.py3-none-any.whl"

# ==================
# Step.1
# setuptools / install

# --> do unzip
echo "" > $file_install_log
echo "#######################" >> $file_install_log
echo "[setuptools]--> do unzip" >> $file_install_log
tar -xzf $software_setuptools -C $path_unzip >> $file_install_log

# --> do python install
echo "" >> $file_install_log
echo "#######################" >> $file_install_log
echo "[setuptools]--> do python install" >> $file_install_log
python $path_unzip"/setuptools-2.0/setup.py" install >> $file_install_log


# ==================
# Step.2
# pip / install

# --> do unzip
echo "" >> $file_install_log
echo "#######################" >> $file_install_log
echo "[pip]--> do unzip" >> $file_install_log
tar -xzf $software_pip -C $path_unzip >> $file_install_log

# --> do python install
echo "" >> $file_install_log
echo "#######################" >> $file_install_log
echo "[pip]--> do python install" >> $file_install_log
cd $path_unzip"/pip-9.0.2" && python setup.py install >> $file_install_log


# ==================
# Step.3
# urllib3 / install

echo "" >> $file_install_log
echo "#######################" >> $file_install_log
echo "[urllib3]--> do pip install" >> $file_install_log
pip install --no-index $software_urllib3 >> $file_install_log


# ==================
# Step.4
# elasticsearch / install

echo "" >> $file_install_log
echo "#######################" >> $file_install_log
echo "[elasticsearch]--> do pip install" >> $file_install_log
pip install --no-index $software_elasticsearch >> $file_install_log

# ==================
# Finished
echo "" >> $file_install_log
# ==================

我的环境里运行演示如下:

[root@python ~]# cd /software
[root@python software]# 
[root@python software]# ls -ltr
total 2328
-rw-r--r-- 1 root root 1343063 Sep  3 02:29 pip-9.0.2.tar.gz
-rw-r--r-- 1 root root  783643 Sep  3 04:55 setuptools-2.0.tar.gz
-rw-r--r-- 1 root root  112226 Sep  3 05:25 elasticsearch-6.0.0-py2.py3-none-any.whl
-rw-r--r-- 1 root root  131717 Sep  3 05:38 urllib3-1.21.1-py2.py3-none-any.whl
-rw-r--r-- 1 root root    2187 Sep  3 11:32 python_2.6.6_install_module_elasticsearch_6.sh
[root@python software]# 
[root@python software]# sh python_2.6.6_install_module_elasticsearch_6.sh 
/usr/lib64/python2.6/distutils/dist.py:266: UserWarning: Unknown distribution option: 'python_requires'
  warnings.warn(msg)
DEPRECATION: Python 2.6 is no longer supported by the Python core team, please upgrade your Python. A future version of pip will drop support for Python 2.6
DEPRECATION: Python 2.6 is no longer supported by the Python core team, please upgrade your Python. A future version of pip will drop support for Python 2.6
[root@python software]# 

脚本执行的上面的告警可以忽略。

我的另一个窗口里面记录了开始没有运行的时候的状态,和脚本运行成功后的状态;
如下:

[root@python ~]# whereis pip
pip:
[root@python ~]# 
[root@python ~]# python
Python 2.6.6 (r266:84292, Aug 18 2016, 15:13:37) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-17)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 
>>> import elasticsearch
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named elasticsearch
>>> 
>>> 
>>> import elasticsearch
>>> 
>>> exit()
[root@python ~]# 
[root@python ~]# whereis pip
pip: /usr/bin/pip2.6 /usr/bin/pip
[root@python ~]# 

可以看到,都装好了。

这样就省事多了,…


Done,…

说点什么

avatar

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

  Subscribe  
提醒