热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

升级Python2.7导致使用pip等命令安装模块失败

升级Python2.7导致使用pip等命令安装模块失败报错如下:#pipTraceback(mostrecentcalllast):Fileusrbinpip

升级Python2.7导致使用pip等命令安装模块失败

报错如下:

# pip
Traceback (most recent call last):File "/usr/bin/pip", line 5, in from pkg_resources import load_entry_point
ImportError: No module named pkg_resources

出现这个问题是因为:虽然已经把Python升级到了2.7版本,但是pip仍然是原来的版本,仍在原来python的site-package里面

CentOS6.8环境下,默认是python2.6.6,site-package在

# /usr/lib/python2.6/site-packages/

很多模块都被安装在这里。直接输入pip,还是使用的原来的pip。所以我们的思路是:应该在新的Python中安装pip,这样才不会报错。

遇到此问题的人很多,网上博客都是互相抄,没有真正解决问题的。有一国外网站给出了解决方案:

# wget https://pypi.python.org/packages/source/s/setuptools/setuptools-3.5.1.zip# unzip setuptools-3.5.1.zip# /usr/local/bin/pyton2.7 distribute_setup.py

使用新版本的python来运行这个脚本,这个会自动安装出来一个easy_install,然后使用这个新的easy_install来安装pip就可以了!

# /usr/local/bin/easy_install pip
# /usr/local/bin/pip -V
pip 9.0.1 from /usr/local/lib/python2.7/site-packages/pip-9.0.1-py2.7.egg (python 2.7)

安装生成的所有二进制文件,都是在你的PYTHON_HOME/bin/,因为我的是安装在/usr/local/python/,所以命令都在这里,以后再调用pip要使用绝对路径,或者做链接!

2.7的模块是在以下目录

# /usr/local/lib/python2.7/site-packages

附:脚本的原文

#!python"""Bootstrap distribute installationIf you want to use setuptools in your package's setup.py, just include this
file in the same directory with it, and add this to the top of your setup.py::from distribute_setup import use_setuptoolsuse_setuptools()If you want to require a specific version of setuptools, set a download
mirror, or use an alternate download directory, you can do so by supplying
the appropriate options to ``use_setuptools()``.This file can also be run as a script to install or upgrade setuptools."""import osimport shutilimport sysimport timeimport fnmatchimport tempfileimport tarfileimport optparse 
from distutils import log 
try:    from site import USER_SITEexcept ImportError:USER_SITE = None 
try:    import subprocess def _python_cmd(*args):args = (sys.executable,) + args        return subprocess.call(args) == 0 
except ImportError:    # will be used for python 2.3def _python_cmd(*args):args = (sys.executable,) + args        # quoting arguments if windowsif sys.platform == 'win32':            def quote(arg):                if ' ' in arg:                    return '"%s"' % arg                return argargs = [quote(arg) for arg in args]        return os.spawnl(os.P_WAIT, sys.executable, *args) == 0DEFAULT_VERSION = "0.6.49"DEFAULT_URL = "http://pypi.python.org/packages/source/d/distribute/"SETUPTOOLS_FAKED_VERSION = "0.6c11"SETUPTOOLS_PKG_INFO = """\
Metadata-Version: 1.0
Name: setuptools
Version: %s
Summary: xxxx
Home-page: xxx
Author: xxx
Author-email: xxx
License: xxx
Description: xxx""" % SETUPTOOLS_FAKED_VERSION 
def _install(tarball, install_args=()):    # extracting the tarballtmpdir = tempfile.mkdtemp()log.warn('Extracting in %s', tmpdir)old_wd = os.getcwd()    try:os.chdir(tmpdir)tar = tarfile.open(tarball)_extractall(tar)tar.close() # going in the directorysubdir = os.path.join(tmpdir, os.listdir(tmpdir)[0])os.chdir(subdir)log.warn('Now working in %s', subdir) # installinglog.warn('Installing Distribute')        if not _python_cmd('setup.py', 'install', *install_args):log.warn('Something went wrong during the installation.')log.warn('See the error message above.')            # exitcode will be 2return 2    finally:os.chdir(old_wd)shutil.rmtree(tmpdir) 
def _build_egg(egg, tarball, to_dir):    # extracting the tarballtmpdir = tempfile.mkdtemp()log.warn('Extracting in %s', tmpdir)old_wd = os.getcwd()    try:os.chdir(tmpdir)tar = tarfile.open(tarball)_extractall(tar)tar.close() # going in the directorysubdir = os.path.join(tmpdir, os.listdir(tmpdir)[0])os.chdir(subdir)log.warn('Now working in %s', subdir) # building an egglog.warn('Building a Distribute egg in %s', to_dir)_python_cmd('setup.py', '-q', 'bdist_egg', '--dist-dir', to_dir) finally:os.chdir(old_wd)shutil.rmtree(tmpdir)    # returning the result    log.warn(egg)    if not os.path.exists(egg):        raise IOError('Could not build the egg.') 
def _do_download(version, download_base, to_dir, download_delay):egg = os.path.join(to_dir, 'distribute-%s-py%d.%d.egg'% (version, sys.version_info[0], sys.version_info[1]))    if not os.path.exists(egg):tarball = download_setuptools(version, download_base,to_dir, download_delay)_build_egg(egg, tarball, to_dir)sys.path.insert(0, egg)    import setuptoolssetuptools.bootstrap_install_from = egg 
def use_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL,to_dir=os.curdir, download_delay=15, no_fake=True):    # making sure we use the absolute pathto_dir = os.path.abspath(to_dir)was_imported = 'pkg_resources' in sys.modules or \        'setuptools' in sys.modules    try:        try:            import pkg_resources # Setuptools 0.7b and later is a suitable (and preferable)# substitute for any Distribute version.try:pkg_resources.require("setuptools>=0.7b")                returnexcept (pkg_resources.DistributionNotFound,pkg_resources.VersionConflict):                passif not hasattr(pkg_resources, '_distribute'):                if not no_fake:_fake_setuptools()                raise ImportError        except ImportError:            return _do_download(version, download_base, to_dir, download_delay)        try:pkg_resources.require("distribute>=" + version)            returnexcept pkg_resources.VersionConflict:e = sys.exc_info()[1]            if was_imported:sys.stderr.write(                "The required version of distribute (>=%s) is not available,\n""and can't be installed while this script is running. Please\n""install a more recent version first, using\n""'easy_install -U distribute'.""\n\n(Currently using %r)\n" % (version, e.args[0]))sys.exit(2)            else:                del pkg_resources, sys.modules['pkg_resources']    # reload okreturn _do_download(version, download_base, to_dir,download_delay)        except pkg_resources.DistributionNotFound:            return _do_download(version, download_base, to_dir,download_delay)    finally:        if not no_fake:_create_fake_setuptools_pkg_info(to_dir) 
def download_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL,to_dir=os.curdir, delay=15):    """Download distribute from a specified location and return its filename`version` should be a valid distribute version number that is availableas an egg for download under the `download_base` URL (which should endwith a '/'). `to_dir` is the directory where the egg will be downloaded.`delay` is the number of seconds to pause before an actual downloadattempt.    """# making sure we use the absolute pathto_dir = os.path.abspath(to_dir)    try:        from urllib.request import urlopen    except ImportError:        from urllib2 import urlopentgz_name = "distribute-%s.tar.gz" % versionurl = download_base + tgz_namesaveto = os.path.join(to_dir, tgz_name)src = dst = None    if not os.path.exists(saveto):  # Avoid repeated downloadstry:log.warn("Downloading %s", url)src = urlopen(url)            # Read/write all in one block, so we don't create a corrupt file# if the download is interrupted.data = src.read()dst = open(saveto, "wb")dst.write(data)        finally:            if src:src.close()            if dst:dst.close()    return os.path.realpath(saveto) 
def _no_sandbox(function):    def __no_sandbox(*args, **kw):        try:            from setuptools.sandbox import DirectorySandbox            if not hasattr(DirectorySandbox, '_old'):                def violation(*args):                    passDirectorySandbox._old = DirectorySandbox._violationDirectorySandbox._violation = violationpatched = True            else:patched = False        except ImportError:patched = False try:            return function(*args, **kw)        finally:            if patched:DirectorySandbox._violation = DirectorySandbox._old                del DirectorySandbox._old return __no_sandboxdef _patch_file(path, content):    """Will backup the file then patch it"""f = open(path)existing_content = f.read()f.close()    if existing_content == content:        # already patchedlog.warn('Already patched.')        return Falselog.warn('Patching...')_rename_path(path)f = open(path, 'w')    try:f.write(content)    finally:f.close()    return True_patch_file = _no_sandbox(_patch_file) 
def _same_content(path, content):f = open(path)existing_content = f.read()f.close()    return existing_content == content 
def _rename_path(path):new_name = path + '.OLD.%s' % time.time()log.warn('Renaming %s to %s', path, new_name)os.rename(path, new_name)    return new_name 
def _remove_flat_installation(placeholder):    if not os.path.isdir(placeholder):log.warn('Unkown installation at %s', placeholder)        return Falsefound = False    for file in os.listdir(placeholder):        if fnmatch.fnmatch(file, 'setuptools*.egg-info'):found = True            breakif not found:log.warn('Could not locate setuptools*.egg-info')        returnlog.warn('Moving elements out of the way...')pkg_info = os.path.join(placeholder, file)    if os.path.isdir(pkg_info):patched = _patch_egg_dir(pkg_info)    else:patched = _patch_file(pkg_info, SETUPTOOLS_PKG_INFO) if not patched:log.warn('%s already patched.', pkg_info)        return False    # now let's move the files out of the wayfor element in ('setuptools', 'pkg_resources.py', 'site.py'):element = os.path.join(placeholder, element)        if os.path.exists(element):_rename_path(element)        else:log.warn('Could not find the %s element of the ''Setuptools distribution', element)    return True_remove_flat_installation = _no_sandbox(_remove_flat_installation) 
def _after_install(dist):log.warn('After install bootstrap.')placeholder = dist.get_command_obj('install').install_purelib_create_fake_setuptools_pkg_info(placeholder) 
def _create_fake_setuptools_pkg_info(placeholder):    if not placeholder or not os.path.exists(placeholder):log.warn('Could not find the install location')        returnpyver = '%s.%s' % (sys.version_info[0], sys.version_info[1])setuptools_file = 'setuptools-%s-py%s.egg-info' % \(SETUPTOOLS_FAKED_VERSION, pyver)pkg_info = os.path.join(placeholder, setuptools_file)    if os.path.exists(pkg_info):log.warn('%s already exists', pkg_info)        returnlog.warn('Creating %s', pkg_info)    try:f = open(pkg_info, 'w')    except EnvironmentError:log.warn("Don't have permissions to write %s, skipping", pkg_info)        returntry:f.write(SETUPTOOLS_PKG_INFO)    finally:f.close()pth_file = os.path.join(placeholder, 'setuptools.pth')log.warn('Creating %s', pth_file)f = open(pth_file, 'w')    try:f.write(os.path.join(os.curdir, setuptools_file))    finally:f.close()_create_fake_setuptools_pkg_info = _no_sandbox(_create_fake_setuptools_pkg_info

def _patch_egg_dir(path):    # let's check if it's already patchedpkg_info = os.path.join(path, 'EGG-INFO', 'PKG-INFO')    if os.path.exists(pkg_info):        if _same_content(pkg_info, SETUPTOOLS_PKG_INFO):log.warn('%s already patched.', pkg_info)            return False_rename_path(path)os.mkdir(path)os.mkdir(os.path.join(path, 'EGG-INFO'))pkg_info = os.path.join(path, 'EGG-INFO', 'PKG-INFO')f = open(pkg_info, 'w')    try:f.write(SETUPTOOLS_PKG_INFO)    finally:f.close()    return True_patch_egg_dir = _no_sandbox(_patch_egg_dir) 
def _before_install():log.warn('Before install bootstrap.')_fake_setuptools() 
def _under_prefix(location):    if 'install' not in sys.argv:        return Trueargs = sys.argv[sys.argv.index('install') + 1:]    for index, arg in enumerate(args):        for option in ('--root', '--prefix'):            if arg.startswith('%s=' % option):top_dir = arg.split('root=')[-1]                return location.startswith(top_dir)            elif arg == option:                if len(args) > index:top_dir = args[index + 1]                    return location.startswith(top_dir)        if arg == '--user' and USER_SITE is not None:            return location.startswith(USER_SITE)    return True 
def _fake_setuptools():log.warn('Scanning installed packages')    try:        import pkg_resources    except ImportError:        # we're coollog.warn('Setuptools or Distribute does not seem to be installed.')        returnws = pkg_resources.working_set    try:setuptools_dist = ws.find(pkg_resources.Requirement.parse('setuptools', replacement=False))    except TypeError:        # old distribute APIsetuptools_dist = ws.find(pkg_resources.Requirement.parse('setuptools')) if setuptools_dist is None:log.warn('No setuptools distribution found')        return# detecting if it was already fakedsetuptools_location = setuptools_dist.locationlog.warn('Setuptools installation detected at %s', setuptools_location) # if --root or --preix was provided, and if# setuptools is not located in them, we don't patch itif not _under_prefix(setuptools_location):log.warn('Not patching, --root or --prefix is installing Distribute'' in another location')        return# let's see if its an eggif not setuptools_location.endswith('.egg'):log.warn('Non-egg installation')res = _remove_flat_installation(setuptools_location)        if not res:            returnelse:log.warn('Egg installation')pkg_info = os.path.join(setuptools_location, 'EGG-INFO', 'PKG-INFO')        if (os.path.exists(pkg_info) and_same_content(pkg_info, SETUPTOOLS_PKG_INFO)):log.warn('Already patched.')            returnlog.warn('Patching...')        # let's create a fake egg replacing setuptools oneres = _patch_egg_dir(setuptools_location)        if not res:            returnlog.warn('Patching complete.')_relaunch() 
def _relaunch():log.warn('Relaunching...')    # we have to relaunch the process# pip marker to avoid a relaunch bug_cmd1 = ['-c', 'install', '--single-version-externally-managed']_cmd2 = ['-c', 'install', '--record']    if sys.argv[:3] == _cmd1 or sys.argv[:3] == _cmd2:sys.argv[0] = 'setup.py'args = [sys.executable] + sys.argvsys.exit(subprocess.call(args)) 
def _extractall(self, path&#61;".", members&#61;None):    """Extract all members from the archive to the current workingdirectory and set owner, modification time and permissions ondirectories afterwards. &#96;path&#39; specifies a different directoryto extract to. &#96;members&#39; is optional and must be a subset of thelist returned by getmembers().    """import copy    import operator    from tarfile import ExtractErrordirectories &#61; [] if members is None:members &#61; self for tarinfo in members:        if tarinfo.isdir():            # Extract directories with a safe mode.            directories.append(tarinfo)tarinfo &#61; copy.copy(tarinfo)tarinfo.mode &#61; 448  # decimal for oct 0700        self.extract(tarinfo, path) # Reverse sort directories.if sys.version_info < (2, 4):        def sorter(dir1, dir2):            return cmp(dir1.name, dir2.name)directories.sort(sorter)directories.reverse()    else:directories.sort(key&#61;operator.attrgetter(&#39;name&#39;), reverse&#61;True) # Set correct owner, mtime and filemode on directories.for tarinfo in directories:dirpath &#61; os.path.join(path, tarinfo.name)        try:self.chown(tarinfo, dirpath)self.utime(tarinfo, dirpath)self.chmod(tarinfo, dirpath)        except ExtractError:e &#61; sys.exc_info()[1]            if self.errorlevel > 1:                raiseelse:self._dbg(1, "tarfile: %s" % e) 
def _build_install_args(options):    """Build the arguments to &#39;python setup.py install&#39; on the distribute package    """install_args &#61; []    if options.user_install:        if sys.version_info < (2, 6):log.warn("--user requires Python 2.6 or later")            raise SystemExit(1)install_args.append(&#39;--user&#39;)    return install_args 
def _parse_args():    """Parse the command line for options    """parser &#61; optparse.OptionParser()parser.add_option(        &#39;--user&#39;, dest&#61;&#39;user_install&#39;, action&#61;&#39;store_true&#39;, default&#61;False,help&#61;&#39;install in user site package (requires Python 2.6 or later)&#39;)parser.add_option(        &#39;--download-base&#39;, dest&#61;&#39;download_base&#39;, metavar&#61;"URL",default&#61;DEFAULT_URL,help&#61;&#39;alternative URL from where to download the distribute package&#39;)options, args &#61; parser.parse_args()    # positional arguments are ignoredreturn options 
def main(version&#61;DEFAULT_VERSION):    """Install or upgrade setuptools and EasyInstall"""options &#61; _parse_args()tarball &#61; download_setuptools(download_base&#61;options.download_base)    return _install(tarball, _build_install_args(options)) 
if __name__ &#61;&#61; &#39;__main__&#39;:sys.exit(main())

 


推荐阅读
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了Python对Excel文件的读取方法,包括模块的安装和使用。通过安装xlrd、xlwt、xlutils、pyExcelerator等模块,可以实现对Excel文件的读取和处理。具体的读取方法包括打开excel文件、抓取所有sheet的名称、定位到指定的表单等。本文提供了两种定位表单的方式,并给出了相应的代码示例。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文介绍了三种方法来实现在Win7系统中显示桌面的快捷方式,包括使用任务栏快速启动栏、运行命令和自己创建快捷方式的方法。具体操作步骤详细说明,并提供了保存图标的路径,方便以后使用。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • RouterOS 5.16软路由安装图解教程
    本文介绍了如何安装RouterOS 5.16软路由系统,包括系统要求、安装步骤和登录方式。同时提供了详细的图解教程,方便读者进行操作。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • Windows7 64位系统安装PLSQL Developer的步骤和注意事项
    本文介绍了在Windows7 64位系统上安装PLSQL Developer的步骤和注意事项。首先下载并安装PLSQL Developer,注意不要安装在默认目录下。然后下载Windows 32位的oracle instant client,并解压到指定路径。最后,按照自己的喜好对解压后的文件进行命名和压缩。 ... [详细]
author-avatar
潇湘V烟雨
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有