代码之家  ›  专栏  ›  技术社区  ›  user1079877

在python中调用另一个已安装的包

  •  2
  • user1079877  · 技术社区  · 8 年前

    我是巨蟒的新手。我要做的是安装后 esptool 包装( pip install esptool )在我的应用程序中用大量参数调用它的主方法。比如:

    esptool.py -p /dev/ttyUSB0 write_flash -fm qio 0x0000
    

    我面临一个问题。 esptool 不在要导入的python包列表中(它已经安装了pip)。我该如何使用 import 然后调用主方法?

    1 回复  |  直到 8 年前
        1
  •  1
  •   hoefling    8 年前

    import esptool esptool.py

    sys.path

    $ PYTHONPATH=$(which esptool.py)/.. python -c "import esptool; esptool.main()"
    

    import os
    import sys
    
    try:
        from shutil import which
    except ImportError:
        from distutils.spawn import find_executable as which
    
    
    bindir = os.path.dirname(which('esptool.py'))
    sys.path.append(bindir)  # after this line, esptool becomes importable
    
    import esptool
    
    
    if __name__ == '__main__':
        esptool.main()
    

    import importlib.machinery
    import importlib.util
    
    from shutil import which
    
    
    if __name__ == '__main__':
        loader = importlib.machinery.SourceFileLoader('esptool', which('esptool.py'))
        spec = importlib.util.spec_from_loader(loader.name, loader)
        esptool = importlib.util.module_from_spec(spec)
        loader.exec_module(esptool)  # after this line, esptool is imported
    
        esptool.main()
    

    import imp
    from distutils.spawn import find_executable as which
    
    
    if __name__ == '__main__':
        esptool = imp.load_source('esptool', which('esptool.py'))
        esptool.main()
    

    sys.argv

    # assuming esptool is imported
    import sys
    
    if __name__ == '__main__':
        # save the current arguments
        argv_original = sys.argv[:]
        # overwrite arguments to be passed to esptool argparser
        sys.argv[:] = ['', '-p', '/dev/ttyUSB0', 'write_flash', '-fm', 'qio', '0x0000']
        try:
            esptool.main()
        except Exception:
            # TODO deal with errors here
            pass
        finally:  # restore original arguments
            sys.argv[:] = argv_original