解决pycharm问题:module 'pip' has no attribute 'main'
解决pycharm问题:module 'pip' has no attribute 'main' - Fordestiny - 博客园 http://www.cnblogs.com/Fordestiny/p/8901100.html
import sys import traceback import getopt import os ERROR_WRONG_USAGE = 1 ERROR_NO_PIP = 2 ERROR_NO_SETUPTOOLS = 3 ERROR_EXCEPTION = 4 os.putenv("PIP_REQUIRE_VIRTUALENV", "false") def exit(retcode): major, minor, micro, release, serial = sys.version_info version = major * 10 + minor if version < 25: import os os._exit(retcode) else: sys.exit(retcode) def usage(): sys.stderr.write('Usage: packaging_tool.py <list|install|uninstall|pyvenv>\n') sys.stderr.flush() exit(ERROR_WRONG_USAGE) def error(message, retcode): sys.stderr.write('Error: %s\n' % message) sys.stderr.flush() exit(retcode) def error_no_pip(): type, value, tb = sys.exc_info() if tb is not None and tb.tb_next is None: error("Python packaging tool 'pip' not found", ERROR_NO_PIP) else: error(traceback.format_exc(), ERROR_EXCEPTION) def do_list(): try: import pkg_resources except ImportError: error("Python packaging tool 'setuptools' not found", ERROR_NO_SETUPTOOLS) for pkg in pkg_resources.working_set: try: requirements = pkg.requires() except Exception: requirements = [] requires = ':'.join([str(x) for x in requirements]) sys.stdout.write('\t'.join([pkg.project_name, pkg.version, pkg.location, requires]) + chr(10)) sys.stdout.flush() def do_get_versions(urls, req): if req is not None: for version in VersionsFinder(urls).get_versions(req): if len(version) > 2: sys.stdout.write(version[2] + chr(10)) sys.stdout.flush() def do_get_latest_version(urls, req): try: from pip.index import PackageFinder, Link except ImportError: error_no_pip() class VersionsFinder(PackageFinder): def __init__(self, index_urls, *args, **kwargs): super(VersionsFinder, self).__init__([], index_urls, *args, **kwargs) def get_versions(self, req): class Req: def __init__(self, name): self.name = name def mkurl_pypi_url(url): loc = os.path.join(url, req) if not loc.endswith('/'): loc += '/' return loc locations = [mkurl_pypi_url(url) for url in self.index_urls] + self.find_links locations = [Link(url, trusted=True) for url in locations] versions = [] for page in self._get_pages(locations, Req(req)): versions.extend(self._package_versions(page.links, req.lower())) return sorted(list(versions), reverse=True) if req is not None: for version in VersionsFinder(urls).get_versions(req): if len(version) > 2: sys.stdout.write(version[2] + chr(10)) sys.stdout.flush() return return "" # 解决pycharm问题:module 'pip' has no attribute 'main' - Fordestiny - 博客园 http://www.cnblogs.com/Fordestiny/p/8901100.html # def do_install(pkgs): # try: # import pip # except ImportError: # error_no_pip() # return pip.main(['install'] + pkgs) # # # def do_uninstall(pkgs): # try: # import pip # except ImportError: # error_no_pip() # return pip.main(['uninstall', '-y'] + pkgs) def do_install(pkgs): try: # import pip from pip._internal import main except ImportError: error_no_pip() # return pip.main(['install'] + pkgs) return main(['install'] + pkgs) def do_uninstall(pkgs): try: # import pip from pip._internal import main except ImportError: error_no_pip() # return pip.main(['uninstall', '-y'] + pkgs) return main(['uninstall', '-y'] + pkgs) def do_pyvenv(path, system_site_packages): try: import venv except ImportError: error("Standard Python 'venv' module not found", ERROR_EXCEPTION) # In Python >= 3.4 venv.create() has a new parameter with_pip=False # that allows to automatically install setuptools and pip with the module # ensurepip. Unfortunately, we cannot use this parameter and have to # bootstrap these packages ourselves, since some distributions of CPython # on Ubuntu don't include ensurepip. venv.create(path, system_site_packages=system_site_packages) def do_untar(name): import tempfile directory_name = tempfile.mkdtemp("pycharm-management") import tarfile tar = tarfile.open(name) for item in tar: tar.extract(item, directory_name) sys.stdout.write(directory_name + chr(10)) sys.stdout.flush() return 0 def mkdtemp_ifneeded(): try: ind = sys.argv.index('--build-dir') if not os.path.exists(sys.argv[ind + 1]): import tempfile sys.argv[ind + 1] = tempfile.mkdtemp('pycharm-packaging') return sys.argv[ind + 1] except: pass return None def main(): try: # As a workaround for #885 in setuptools, don't expose other helpers # in sys.path so as not no confuse it with possible combination of # namespace/ordinary packages sys.path.remove(os.path.dirname(__file__)) except ValueError: pass retcode = 0 try: if len(sys.argv) < 2: usage() cmd = sys.argv[1] if cmd == 'list': if len(sys.argv) != 2: usage() do_list() elif cmd == 'latestVersion': if len(sys.argv) < 4: usage() do_get_latest_version(sys.argv[3:], sys.argv[2]) elif cmd == 'install': if len(sys.argv) < 2: usage() rmdir = mkdtemp_ifneeded() pkgs = sys.argv[2:] retcode = do_install(pkgs) if rmdir is not None: import shutil shutil.rmtree(rmdir) elif cmd == 'untar': if len(sys.argv) < 2: usage() name = sys.argv[2] retcode = do_untar(name) elif cmd == 'uninstall': if len(sys.argv) < 2: usage() pkgs = sys.argv[2:] retcode = do_uninstall(pkgs) elif cmd == 'pyvenv': opts, args = getopt.getopt(sys.argv[2:], '', ['system-site-packages']) if len(args) != 1: usage() path = args[0] system_site_packages = False for opt, arg in opts: if opt == '--system-site-packages': system_site_packages = True do_pyvenv(path, system_site_packages) else: usage() except Exception: traceback.print_exc() exit(ERROR_EXCEPTION) exit(retcode) if __name__ == '__main__': main()