Запуск моделей brightway2 из других программ

Я хочу запустить Brightway2 в рамках оптимизации ( https://brightwaylca.org/ ).

В принципе, я хочу создать скрипт Python, который отправляет входной файл во внешнюю модель (также в Python) и получает выходные данные. Затем скрипт запишет данные об активности в базу данных Brightway, а затем запустит Brightway2, чтобы получить оценку LCA. Эта оценка будет использоваться для обновления входного файла на основе алгоритма оптимизации.

Brightway2 кажется уникальным для такого рода проектов, но у меня возникли проблемы с реализацией. В принципе, я хотел знать, какой самый простой способ это сделать. У меня есть внешняя модель и алгоритмы оптимизации.

До сих пор я использовал ноутбуки Jupyter для своих моделей Brightway2, но я часто получаю ошибки, когда я преобразую ноутбуки в модули python и запускаю их в среде Brightway2 в IPython. Есть ли причина, по которой модули должны работать иначе в IPython, чем в ноутбуках Jupyter?

Я думал использовать PyAutoGUI для отправки входов в среду Brightway2 и IPython. Есть ли более простой / лучший способ сделать это?

Есть ли способ импортировать необходимые модули Brightway без запуска в среде Brightway2?

Спасибо

Вот пример ошибки, которую я получаю с IPython, но не с Jupyter notes. Когда я запускаю следующий код в Jupyter notes, он работает нормально.

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~1ECOINV~1ECOINV~1.2-Cdatasets"
    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()

Но если я запускаю его в IPython в среде bw2, он зависает / разбился на

 ei = SingleOutputEcospold2Importer(data_directory, database_name)

Это дает мне следующую ошибку:

-------------------------------------------------------------
AttributeError                            Traceback (most rec
C:bw2-pythonAlgae LCABW2_Project_Database_Setup_Test.py in
 36
 37 if __name__ == "__main__":
 ---> 38     main()
 39

C:bw2-pythonAlgae LCABW2_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-pythonenvsbw2libsite-packagesbw2ioimportersecos
 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-pythonenvsbw2libsite-packagesbw2ioextractorseco
 77
 78         if use_mp:
 ---> 79            with multiprocessing.Pool(processes=multi
 80                 print("Extracting XML data from {} da
 81                 results = [

C:bw2-pythonenvsbw2libmultiprocessingcontext.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-pythonenvsbw2libmultiprocessingpool.py in __init_
166         self._processes = processes
167         self._pool = []
--> 168     self._repopulate_pool()
169
170         self._worker_handler = threading.Thread(

C:bw2-pythonenvsbw2libmultiprocessingpool.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-pythonenvsbw2libmultiprocessingprocess.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-pythonenvsbw2libmultiprocessingcontext.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-pythonenvsbw2libmultiprocessingpopen_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-pythonenvsbw2libmultiprocessingspawn.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

AttributeError: модуль ‘main‘ не имеет атрибута ‘ spec

1 ответ

  1. Проблема, с которой вы сталкиваетесь, заключается в том, что многопроцессорная обработка не работает в (i)Python shell на Windows . Ноутбук избегает этой проблемы с помощью, в основном, магии. По Ecospold2DataExtractorумолчанию используется многопроцессорная обработка для ускорения извлечения многих файлов Ecospold2. Это, вероятно, должно быть сделано необязательным; сейчас вы можете сделать одно из следующих действий:

    1. Вам нужно импортировать ecoinvent 3.2 только один раз, так что это может быть сделано в A) блокноте или b) отдельном скрипте python, который вы вызываете в командной строке.
    2. Используйте Хак написания сценария импорта, а затем импорта, вместо того, чтобы делать в импорте непосредственно в сеансе python (см. ссылку SO выше для получения более подробной информации).

    В ответ на некоторые другие вопросы / проблемы:

    Есть ли причина, по которой модули должны работать иначе в IPython, чем в ноутбуках Jupyter?

    Нет. Каждый раз, когда это происходит, должно быть сообщено как ошибка .

    Я думал использовать PyAutoGUI для отправки входов в среду Brightway2 и IPython. Есть ли более простой / лучший способ сделать это?

    GUI трудны-вы радушны для того чтобы написать одно!

    Есть ли способ импортировать необходимые модули Brightway без запуска в среде Brightway2?

    НетBrightway2 environment-просто набор пакетов python, которые можно импортировать. Вы можете импортировать их отдельно (хотя некоторые зависят друг от друга), напримерbw2calc, может быть запущен независимо от всего остального.