это mad_import.py
import pieqt
import sys
import importlib
def mad_import(module):
#for module in modules:
libs = [m[0] for m in filter(lambda a: type(a[1]) == type(module), module.__dict__.items())]
print(libs)
for lib in libs:
__import__(lib)
generate_runtime_python_imports(libs,module)
generate_runtime_python_imports_from(libs)
importlib.import_module('runtime_python_imports_from')
# __import__('runtime_python_imports_from.py')
#return libs
def generate_runtime_python_imports(libs,module):
dic = module.__dict__.items()
moduleNames = []
roukzouk = []
for key in dic:
for lib in libs:
print(key[1])
if key[1]!=None and lib in str(key[1]) and 'from' not in str(key[1]):
print(True)
roukzouk.append(str(key[1]))
# sys.exit()
if key[1] != None:
d=str(key[1])+'s'
moduleNames.append(d)
print('-'*100)
import_line_text = ""
for import_line in roukzouk:
for lib in libs:
import_line = import_line[import_line.find(lib):].rstrip("'>")
print(import_line)
import_line_text+="import "+import_line+"\n"
with open("runtime_python_imports.py", "w") as runtime_python_imports:
runtime_python_imports.write(import_line_text)
def generate_runtime_python_imports_from(libs):
import_line_from_text = ""
for lib in libs:
import_line_from_text += "from "+lib+" import *\n"
with open("runtime_python_imports_from.py", "w") as runtime_python_imports_from:
runtime_python_imports_from.write(import_line_from_text)
# import importlib
# for module in moduleNames:
# if module not in {'__name__','__doc__','__package__','__loader__','__spec__','__file__','__cached__','__builtins__'}:
# importlib.import_module(module)
# print(QApplication)
# mad_import(pieqt)
это pieqt.py
import PySide2
import PySide2.QtCore
from PySide2.QtGui import*
from PySide2.QtWidgets import*
QApplication = PySide2.QtWidgets.QApplication
QTextEdit = PySide2.QtWidgets.QTextEdit
QLabel = PySide2.QtWidgets.QLabel
QPushButton = PySide2.QtWidgets.QPushButton
QCheckBox = PySide2.QtWidgets.QCheckBox
QMainWindow = PySide2.QtWidgets.QMainWindow
QVBoxLayout = PySide2.QtWidgets.QVBoxLayout
QWidget = PySide2.QtWidgets.QWidget
def user_function():
print("I am a user function")
callbacks = []
def run():
global callbacks
for callback in callbacks:
callback()
def callback_user_functions():
global callbacks
for callback in callbacks:
callback()
def add_function(function):
global callbacks
callbacks.append(function)
def main():
print("Enter your code below!!!")
global callbacks
add_function(user_function)
run()
#callback_user_functions()
if __name__ == "__main__":
main()
и это test_mad_import.py
import pieqt
from pieqt import *
import mad_import
mad_import.mad_import(pieqt)
print(QTableView)
Когда я запускаю test_mad_import.py в этой папке, он работает правильно (я могу вызвать mad_import.mad_import (pieqt) и QTableView существует)
Но когда я иду в другой каталог, чтобы проверить его, я устанавливаю pip-пакет (который я загрузил вGitHub, и использовал шпагат), но я не могу назвать mad_import.mad_import (pieqt).Это дает TypeError: объект 'module' не вызывается (если я делаю mad_import (pieqt)) и AttributeError: модуль 'foo' не имеет атрибута 'foo' (когда я это делаю mad_import.mad_import (pieqt))
Так есть ли различие в программном обеспечении, установленном в pip, и локальном размещении всех файлов в папке?