热门标签 | 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())

 


推荐阅读
  • 大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式
    大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式 ... [详细]
  • 在 CentOS 7 系统中安装 Scrapy 时遇到了一些挑战。尽管 Scrapy 在 Ubuntu 上安装简便,但在 CentOS 7 上需要额外的配置和步骤。本文总结了常见问题及其解决方案,帮助用户顺利安装并使用 Scrapy 进行网络爬虫开发。 ... [详细]
  • Python 程序转换为 EXE 文件:详细解析 .py 脚本打包成独立可执行文件的方法与技巧
    在开发了几个简单的爬虫 Python 程序后,我决定将其封装成独立的可执行文件以便于分发和使用。为了实现这一目标,首先需要解决的是如何将 Python 脚本转换为 EXE 文件。在这个过程中,我选择了 Qt 作为 GUI 框架,因为之前对此并不熟悉,希望通过这个项目进一步学习和掌握 Qt 的基本用法。本文将详细介绍从 .py 脚本到 EXE 文件的整个过程,包括所需工具、具体步骤以及常见问题的解决方案。 ... [详细]
  • 在Linux系统中避免安装MySQL的简易指南
    在Linux系统中避免安装MySQL的简易指南 ... [详细]
  • Python错误重试让多少开发者头疼?高效解决方案出炉
    ### 优化后的摘要在处理 Python 开发中的错误重试问题时,许多开发者常常感到困扰。为了应对这一挑战,`tenacity` 库提供了一种高效的解决方案。首先,通过 `pip install tenacity` 安装该库。使用时,可以通过简单的规则配置重试策略。例如,可以设置多个重试条件,使用 `|`(或)和 `&`(与)操作符组合不同的参数,从而实现灵活的错误重试机制。此外,`tenacity` 还支持自定义等待时间、重试次数和异常处理,为开发者提供了强大的工具来提高代码的健壮性和可靠性。 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 在Linux系统中,网络配置是至关重要的任务之一。本文详细解析了Firewalld和Netfilter机制,并探讨了iptables的应用。通过使用`ip addr show`命令来查看网卡IP地址(需要安装`iproute`包),当网卡未分配IP地址或处于关闭状态时,可以通过`ip link set`命令进行配置和激活。此外,文章还介绍了如何利用Firewalld和iptables实现网络流量控制和安全策略管理,为系统管理员提供了实用的操作指南。 ... [详细]
  • 本指南从零开始介绍Scala编程语言的基础知识,重点讲解了Scala解释器REPL(读取-求值-打印-循环)的使用方法。REPL是Scala开发中的重要工具,能够帮助初学者快速理解和实践Scala的基本语法和特性。通过详细的示例和练习,读者将能够熟练掌握Scala的基础概念和编程技巧。 ... [详细]
  • 本文详细介绍了使用 Python 进行 MySQL 和 Redis 数据库操作的实战技巧。首先,针对 MySQL 数据库,通过 `pymysql` 模块展示了如何连接和操作数据库,包括建立连接、执行查询和更新等常见操作。接着,文章深入探讨了 Redis 的基本命令和高级功能,如键值存储、列表操作和事务处理。此外,还提供了多个实际案例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 在 CentOS 7 中,为了扩展可用软件包的数量,通常需要配置多个第三方软件源。这些第三方源包括 EPEL、Nux Dextop 和 ELRepo 等,它们提供了大量官方源中未包含的软件包,从而增强了系统的功能性和灵活性。通过正确配置这些源,用户可以轻松安装和管理更多种类的软件,满足不同的需求。 ... [详细]
  • 【图像分类实战】利用DenseNet在PyTorch中实现秃头识别
    本文详细介绍了如何使用DenseNet模型在PyTorch框架下实现秃头识别。首先,文章概述了项目所需的库和全局参数设置。接着,对图像进行预处理并读取数据集。随后,构建并配置DenseNet模型,设置训练和验证流程。最后,通过测试阶段验证模型性能,并提供了完整的代码实现。本文不仅涵盖了技术细节,还提供了实用的操作指南,适合初学者和有经验的研究人员参考。 ... [详细]
  • Netty框架中运用Protobuf实现高效通信协议
    在Netty框架中,通过引入Protobuf来实现高效的通信协议。为了使用Protobuf,需要先准备好环境,包括下载并安装Protobuf的代码生成器`protoc`以及相应的源码包。具体资源可从官方下载页面获取,确保版本兼容性以充分发挥其性能优势。此外,配置好开发环境后,可以通过定义`.proto`文件来自动生成Java类,从而简化数据序列化和反序列化的操作,提高通信效率。 ... [详细]
  • 在使用 `requests` 库进行 HTTP 请求时,如果遇到 `requests.exceptions.SSLError: HTTPSConnectionPool` 错误,通常是因为 SSL 证书验证失败。解决这一问题的方法包括:检查目标网站的 SSL 证书是否有效、更新本地的 CA 证书库、禁用 SSL 验证(不推荐用于生产环境)或使用自定义的 SSL 上下文。此外,确保 `requests` 库和相关依赖项已更新到最新版本,以避免潜在的安全漏洞。 ... [详细]
  • 在Python多进程编程中,`multiprocessing`模块是不可或缺的工具。本文详细探讨了该模块在多进程管理中的核心原理,并通过实际代码示例进行了深入分析。文章不仅总结了常见的多进程编程技巧,还提供了解决常见问题的实用方法,帮助读者更好地理解和应用多进程编程技术。 ... [详细]
  • 基于 Bottle 框架构建的幽默应用 —— Python 实践 ... [详细]
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社区 版权所有