解决AttributeError: 'module' object has no attribute 'main' 安装第三方包报错

1.找到pycharm 目录下的 \helper\packaging_tool.py 文件
2.用新版pycharm 的packaging_tool.py 替换 旧版 同名文件
文件代码如下:
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_install(pkgs):  
     return pip_main([ 'install' ] + pkgs)
 
 
def do_uninstall(pkgs):
     return pip_main([ 'uninstall' , '-y' ] + pkgs)
 
 
def pip_main(args):
     try :
         import pip
     except ImportError:
         error_no_pip()
 
     try :
         func = pip.main
     except AttributeError:
         from pip._internal import main as func
 
     func(args)
 
 
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 = = '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()
 
替换掉代码即可

猜你喜欢

转载自www.cnblogs.com/wujf-myblog/p/9620315.html