Ich möchte Brightway2 innerhalb eines Optimierungsrahmens (https://brightwaylca.org/) ausführen.Ausführen von Brightway2-Modellen aus anderen Programmen
Grundsätzlich möchte ich ein Python-Skript erstellen, das eine Eingabedatei an ein externes Modell (auch in Python) sendet und die Ausgaben abruft. Das Skript schreibt dann Aktivitätsdaten in eine Brightway-Datenbank und führt dann Brightway2 aus, um einen LCA-Score zu erhalten. Diese Bewertung wird dann verwendet, um die Eingabedatei basierend auf einem Optimierungsalgorithmus zu aktualisieren.
Brightway2 scheint für diese Art von Projekt eindeutig geeignet, aber ich habe Probleme bei der Implementierung. Im Grunde wollte ich wissen, was der einfachste Weg war, dies zu tun. Ich habe das externe Modell und die Optimierungsalgorithmen.
Bis jetzt habe ich Jupyter Notebooks für meine Brightway2 Modelle verwendet, aber ich bekomme oft Fehler wenn ich die Notebooks in Python Module umwandle und sie in der Brightway2 Umgebung in IPython laufe. Gibt es einen Grund, warum die Module in IPython anders laufen sollten als in Jupyter Notebooks?
Ich dachte daran, PyAutoGUI zu verwenden, um Eingaben an die Brightway2-Umgebung und IPython zu senden. Gibt es einen leichteren/besseren Weg das zu tun?
Gibt es eine Möglichkeit, die erforderlichen Brightway-Module zu importieren, ohne in der Brightway2-Umgebung ausgeführt zu werden?
Dank
Hier ist ein Beispiel für einen Fehler, den ich mit IPython, aber nicht mit Jupyter Noten. Wenn ich den folgenden Code in Jupyter Notizen ausführen, läuft es gut.
from brightway2 import *
def main():
project_name = "Algae_LCA"
projects.set_current(project_name)
bw2setup()
methods.load()
#Set directory for Ecoinvent v3.2 datasets and name the database.
data_directory = "E:\GOOGLE~1\ECOINV~1\ECOINV~1.2-C\datasets"
database_name = "Ecoinvent_v3.2-Conseq"
#Import the database, apply cleaning strategies, and provide statistics
ei = SingleOutputEcospold2Importer(data_directory, database_name)
ei.apply_strategies()
ei.statistics()
Aber wenn ich es in IPython im bw2-Umgebung ausführen, es auflegt/abgestürzt auf
ei = SingleOutputEcospold2Importer(data_directory, database_name)
Es gibt mir die folgende Fehlermeldung:
-------------------------------------------------------------
AttributeError Traceback (most rec
C:\bw2-python\Algae LCA\BW2_Project_Database_Setup_Test.py in
36
37 if __name__ == "__main__":
---> 38 main()
39
C:\bw2-python\Algae LCA\BW2_Project_Database_Setup_Test.py in
25 #Import the database, apply cleaning strategies,
26
---> 27 ei = SingleOutputEcospold2Importer(data_directory
28 #ei.apply_strategies()
29 #ei.statistics()
C:\bw2-python\envs\bw2\lib\site-packages\bw2io\importers\ecos
47
48 start = time()
---> 49 self.data = Ecospold2DataExtractor.extract(di
50 print(u"Extracted {} datasets in {:.2f} secon
51 len(self.data), time() - start))
C:\bw2-python\envs\bw2\lib\site-packages\bw2io\extractors\eco
77
78 if use_mp:
---> 79 with multiprocessing.Pool(processes=multi
80 print("Extracting XML data from {} da
81 results = [
C:\bw2-python\envs\bw2\lib\multiprocessing\context.py in Pool
116 from .pool import Pool
117 return Pool(processes, initializer, initargs,
--> 118 context=self.get_context())
119
120 def RawValue(self, typecode_or_type, *args):
C:\bw2-python\envs\bw2\lib\multiprocessing\pool.py in __init_
166 self._processes = processes
167 self._pool = []
--> 168 self._repopulate_pool()
169
170 self._worker_handler = threading.Thread(
C:\bw2-python\envs\bw2\lib\multiprocessing\pool.py in _repopu
231 w.name = w.name.replace('Process', 'PoolW
232 w.daemon = True
--> 233 w.start()
234 util.debug('added worker')
235
C:\bw2-python\envs\bw2\lib\multiprocessing\process.py in star
103 'daemonic processes are not allowed to
104 _cleanup()
--> 105 self._popen = self._Popen(self)
106 self._sentinel = self._popen.sentinel
107 _children.add(self)
C:\bw2-python\envs\bw2\lib\multiprocessing\context.py in _Pop
311 def _Popen(process_obj):
312 from .popen_spawn_win32 import Popen
--> 313 return Popen(process_obj)
314
315 class SpawnContext(BaseContext):
C:\bw2-python\envs\bw2\lib\multiprocessing\popen_spawn_win32.
32
33 def __init__(self, process_obj):
---> 34 prep_data = spawn.get_preparation_data(proces
35
36 # read end of pipe will be "stolen" by the ch
C:\bw2-python\envs\bw2\lib\multiprocessing\spawn.py in get_pr
171 # or through direct execution (or to leave it alo
172 main_module = sys.modules['__main__']
--> 173 main_mod_name = getattr(main_module.__spec__, "na
174 if main_mod_name is not None:
175 d['init_main_from_name'] = main_mod_name
Attribute: Modul ' Haupt 'hat keine Eigenschaft' Spezifikation '
Das macht Sinn. Ich folgte im Wesentlichen Ihrem Vorschlag und machte das Projekt und importierte die Daten einmal, und dann verwendete Skripte, um es auszuführen.
– JimIch war noch am Bearbeiten des Kommentars und ging über das 5-Minuten-Fenster. Ich lasse immer die bw2-env.bat laufen, die mir erlaubt, brightway2 zu importieren, was ich sonst nicht tun kann. – Jim
"GUIs sind schwer - Sie können gerne eine schreiben!" Oh, ich bin nicht im Begriff, eine GUI zu schreiben. Sie können wahrscheinlich sagen, dass dies außerhalb meiner Fähigkeiten ist. Ich benutze nur pyautogui, um Text zu senden, um IPython und meine Skripte auszuführen, nachdem bw2-env.bat ausgeführt wurde. Danke für Ihre Hilfe. – Jim