Как я могу получить список всех стандартных библиотек Python

Я хочу что-то вроде sys.builtin_module_names за исключением стандартной библиотеки. Другие вещи, которые не сработали:

  • sys.modules – показывает только те модули, которые уже загружены
  • sys.prefix – путь, который будет включать нестандартные библиотечные модули EDIT: и, похоже, не работает внутри virtualenv.

Причина, по которой я хочу этот список, заключается в том, что я могу передать его параметрам командной строки --ignore-module или --ignore-dir trace http://docs.python.org/library/trace.html

Поэтому в конечном счете, я хочу знать, как игнорировать все стандартные модули библиотеки при использовании trace или sys.settrace .

EDIT: Я хочу, чтобы он работал внутри virtualenv. http://pypi.python.org/pypi/virtualenv

EDIT2: Я хочу, чтобы он работал во всех средах (например, в разных операционных системах, внутри и снаружи виртуального сервера).

  • virtualenv, который может найти перемещенные libraires (например, mysqlclient lib для MySQLdb)
  • как копировать модули из одного виртуального в другой
  • Где virtualenvwrapper.sh после установки pip?
  • проблема с python pip с установкой требований.txt
  • Ошибка `dyld: Library not loaded`, предотвращающая загрузку virtualenv
  • Какова связь между виртуальными и пиенвскими?
  • Как установить MatPlotLib на Mac 10.7 в virtualenv
  • Получение «Ошибка при загрузке модуля MySQLdb: нет модуля с именем MySQLdb» - попробовали ранее опубликованные решения
  • 7 Solutions collect form web for “Как я могу получить список всех стандартных библиотек Python”

    Почему бы не решить, что входит в стандартную библиотеку?

     import distutils.sysconfig as sysconfig import os std_lib = sysconfig.get_python_lib(standard_lib=True) for top, dirs, files in os.walk(std_lib): for nm in files: if nm != '__init__.py' and nm[-3:] == '.py': print os.path.join(top, nm)[len(std_lib)+1:-3].replace('\\','.') 

    дает

     abc aifc antigravity --- a bunch of other files ---- xml.parsers.expat xml.sax.expatreader xml.sax.handler xml.sax.saxutils xml.sax.xmlreader xml.sax._exceptions 

    Изменить. Вероятно, вы захотите добавить чек, чтобы избежать site-packages если вам нужно избегать нестандартных модулей библиотеки.

    Если кто-то все еще читает это в 2015 году, я столкнулся с той же проблемой и не понравился ни одному из существующих решений. Таким образом, я грубо заставил его написать код, чтобы очистить TOC страницы стандартной библиотеки в официальных документах Python. Я также создал простой API для получения списка стандартных библиотек (для Python версии 2.6, 2.7, 3.2, 3.3 и 3.4).

    Пакет здесь , и его использование довольно просто:

     >>> from stdlib_list import stdlib_list >>> libraries = stdlib_list("2.7") >>> libraries[:10] ['AL', 'BaseHTTPServer', 'Bastion', 'CGIHTTPServer', 'ColorPicker', 'ConfigParser', 'Cookie', 'DEVICE', 'DocXMLRPCServer', 'EasyDialogs'] 

    Взгляните на это, https://docs.python.org/3/py-modindex.html. Они сделали индексную страницу для стандартных модулей.

    Ниже приведено мнение о том, что ответ Caspar не является межплатформенным, и пропускает модули верхнего уровня (например, email ), динамически загружаемые модули (например, array ) и встроенные модули ядра (например, sys ):

     import distutils.sysconfig as sysconfig import os import sys std_lib = sysconfig.get_python_lib(standard_lib=True) for top, dirs, files in os.walk(std_lib): for nm in files: prefix = top[len(std_lib)+1:] if prefix[:13] == 'site-packages': continue if nm == '__init__.py': print top[len(std_lib)+1:].replace(os.path.sep,'.') elif nm[-3:] == '.py': print os.path.join(prefix, nm)[:-3].replace(os.path.sep,'.') elif nm[-3:] == '.so' and top[-11:] == 'lib-dynload': print nm[0:-3] for builtin in sys.builtin_module_names: print builtin 

    Это все еще не идеально, потому что он будет пропускать такие вещи, как os.path который определяется изнутри os.py от платформы образом с помощью кода, такого как import posixpath as path , но он, вероятно, так же хорош, как и вы, помните, что Python – динамический язык, и вы никогда не можете знать, какие модули определены до тех пор, пока они не будут определены во время выполнения.

    Вот ответ 2014 года на вопрос 2011 года –

    Автор isort , инструмент, который очищает импорт, должен был решить эту же проблему, чтобы удовлетворить требование pep8 о том, что импорт основной библиотеки должен быть заказан до импорта третьей стороной.

    Я использую этот инструмент, и он работает хорошо. Вы можете использовать метод place_module в файле isort.py , так как это открытый исходный код, я надеюсь, что автор не возражал бы мне воспроизводить логику здесь:

     def place_module(self, moduleName): """Tries to determine if a module is a python std import, third party import, or project code: if it can't determine - it assumes it is project code """ if moduleName.startswith("."): return SECTIONS.LOCALFOLDER index = moduleName.find('.') if index: firstPart = moduleName[:index] else: firstPart = None for forced_separate in self.config['forced_separate']: if moduleName.startswith(forced_separate): return forced_separate if moduleName == "__future__" or (firstPart == "__future__"): return SECTIONS.FUTURE elif moduleName in self.config['known_standard_library'] or \ (firstPart in self.config['known_standard_library']): return SECTIONS.STDLIB elif moduleName in self.config['known_third_party'] or (firstPart in self.config['known_third_party']): return SECTIONS.THIRDPARTY elif moduleName in self.config['known_first_party'] or (firstPart in self.config['known_first_party']): return SECTIONS.FIRSTPARTY for prefix in PYTHONPATH: module_path = "/".join((prefix, moduleName.replace(".", "/"))) package_path = "/".join((prefix, moduleName.split(".")[0])) if (os.path.exists(module_path + ".py") or os.path.exists(module_path + ".so") or (os.path.exists(package_path) and os.path.isdir(package_path))): if "site-packages" in prefix or "dist-packages" in prefix: return SECTIONS.THIRDPARTY elif "python2" in prefix.lower() or "python3" in prefix.lower(): return SECTIONS.STDLIB else: return SECTIONS.FIRSTPARTY return SECTION_NAMES.index(self.config['default_section']) 

    Очевидно, вам нужно использовать этот метод в контексте класса и файла настроек. Это в основном резерв по статическому списку известных импортов основных библиотек.

     # Note that none of these lists must be complete as they are simply fallbacks for when included auto-detection fails. default = {'force_to_top': [], 'skip': ['__init__.py', ], 'line_length': 80, 'known_standard_library': ["abc", "anydbm", "argparse", "array", "asynchat", "asyncore", "atexit", "base64", "BaseHTTPServer", "bisect", "bz2", "calendar", "cgitb", "cmd", "codecs", "collections", "commands", "compileall", "ConfigParser", "contextlib", "Cookie", "copy", "cPickle", "cProfile", "cStringIO", "csv", "datetime", "dbhash", "dbm", "decimal", "difflib", "dircache", "dis", "doctest", "dumbdbm", "EasyDialogs", "errno", "exceptions", "filecmp", "fileinput", "fnmatch", "fractions", "functools", "gc", "gdbm", "getopt", "getpass", "gettext", "glob", "grp", "gzip", "hashlib", "heapq", "hmac", "imaplib", "imp", "inspect", "itertools", "json", "linecache", "locale", "logging", "mailbox", "math", "mhlib", "mmap", "multiprocessing", "operator", "optparse", "os", "pdb", "pickle", "pipes", "pkgutil", "platform", "plistlib", "pprint", "profile", "pstats", "pwd", "pyclbr", "pydoc", "Queue", "random", "re", "readline", "resource", "rlcompleter", "robotparser", "sched", "select", "shelve", "shlex", "shutil", "signal", "SimpleXMLRPCServer", "site", "sitecustomize", "smtpd", "smtplib", "socket", "SocketServer", "sqlite3", "string", "StringIO", "struct", "subprocess", "sys", "sysconfig", "tabnanny", "tarfile", "tempfile", "textwrap", "threading", "time", "timeit", "trace", "traceback", "unittest", "urllib", "urllib2", "urlparse", "usercustomize", "uuid", "warnings", "weakref", "webbrowser", "whichdb", "xml", "xmlrpclib", "zipfile", "zipimport", "zlib", 'builtins', '__builtin__'], 'known_third_party': ['google.appengine.api'], 'known_first_party': [], 

    — надрез —

    Я уже успел написать этот инструмент для себя, прежде чем наткнуться на модуль isort, поэтому я надеюсь, что это также поможет кому-то еще избежать повторного изобретения колеса!

    Это приблизит вас:

     import sys; import glob glob.glob(sys.prefix + "/lib/python%d.%d" % (sys.version_info[0:2]) + "/*.py") 

    Другая возможность для опции ignore-dir :

     os.pathsep.join(sys.path) 

    Я бы посоветовал ссылку на стандартную библиотеку в официальной документации, которая проходит через всю библиотеку с разделом для каждого модуля. 🙂

    Python - лучший язык программирования в мире.