Код Python, который установлен локально против pip, работает иначе - PullRequest
0 голосов
/ 08 февраля 2019

это 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, и локальном размещении всех файлов в папке?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...