Wie ich sehe, hast Du Python 3.7 installiert, dort ist der Namen des Pfades wohl site-packages.
Bei mir mit Python 3.4 ist es dist-packages.
Vielleicht hat es auch evtl. damit zu tun, das wir beide unterschiedliche Betriebssysteme nutzen!?
Bei dem überwiegenden Teil, sind das ohl Module, die zu dem Paket python3 gehören.
Die mit dem Unterordner dist-packages, sind selbst installierte Pakete, wie z.B. reportlab aus dem Paket python3-reportlab.
Diese < atexit, sys, time > gehören wohl zur Standardbibliothek, konnte aber keine Anhaltspunkte in meiner Paketverwaltung finden.
Naja, zumindets lässt sich das mal recht gut eingrenzen, der Rest ist wohl Handarbeit ...
Mein ganzer Code zu dieser Geschichte, sieht so aus (lässt sich bestimmt noch optimieren, aber es funktioniert):
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# For Python3.x
import os
import sys
def search_import_names(modul, import_names):
"""
Suche in Python-Dateien nach Import von Modulen.
Gebe die die Namen der Module aus.
"""
pool = set()
with open(modul, 'r') as handler:
for obj in handler:
if not obj.startswith(('from ', 'import ')):
continue
if obj.startswith('from '):
modul = obj.split('from ')[1].split(' ')[0]
elif obj.startswith('import '):
modul = obj.split('import ')[1].split(' ')[0].strip()
modul = modul.replace(',', '')
import_names.add(modul)
return import_names
def search_py_files():
"""
Suche in Python-Pfad nach Python-Dateien.
Überprüfung untergeordnete Ordner in Python-Pfad (Erste Ebene).
Übergabe der Python-Dateien an Funktion < search_import_names >,
zum suchen der importierten Module.
Erstellung aller importierten Modul-Namen in < import_names >
als Set, sowie ein Dictionary mit eigen erstellten Modulen
in < modul2privat >.
Übergabe von < import_names > und < modul2privat > an Funktion
< build_python_importnames >.
"""
import_names = set()
modul2privat = dict()
for filename in os.listdir(os.getcwd()):
check = '{}{}{}'.format(os.getcwd(), os.sep, filename)
if os.path.isfile(check) and filename.endswith('.py'):
modul = check
import_names = search_import_names(modul, import_names)
modul2privat[filename.replace('.py', '')] = True
elif os.path.isdir(check):
pathname = filename
path = '{}{}{}'.format(os.getcwd(), os.sep, pathname)
for file in os.listdir(path):
modul = '{}{}{}'.format(path, os.sep, file)
if os.path.isfile(modul) and modul.endswith('.py'):
import_names = search_import_names(modul, import_names)
modul2privat[file.replace('.py', '')] = True
return build_python_importnames(import_names, modul2privat)
def build_python_importnames(import_names, modul2privat):
"""
Entfernung der eigen erstellten Modulen aus < import_names >.
Gebe die Namen der importierten Python-Module aus.
Übergabe von < python_import_names > an Funktion < find_python_pachage_path >,
zur Findung Python-Pfades der Python-Module.
"""
python_import_names = set()
for name in import_names:
try:
modul2privat[name]
except KeyError:
python_import_names.add(name)
return find_python_pachage_path(python_import_names)
def find_python_pachage_path(python_import_names):
"""
Import der Namen aus < python_import_names > mit Ausgabe
der Python-Pfade < python_paths > und < AttributeError_names >, bei
denen es kein Resultat gab.
"""
python_paths = set()
AttributeError_names = list()
for name in sorted(python_import_names):
try:
python_paths.add(__import__(name).__file__)
except AttributeError:
AttributeError_names.append((name, __import__(name)))
python_paths = sorted(python_paths)
AttributeError_names = sorted(AttributeError_names)
print('####### python_paths #######')
print(python_paths)
print('####### AttributeError_names #######')
print(AttributeError_names)
return python_paths, AttributeError_names
def main():
search_py_files()
if __name__ == '__main__':
main()