2016-11-07 3 views
0

Я хочу запустить Brightway2 в рамках оптимизации (https://brightwaylca.org/).Запуск моделей brightway2 из других программ

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

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

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

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

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

Благодаря

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

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() 

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

ei = SingleOutputEcospold2Importer(data_directory, database_name) 

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

------------------------------------------------------------- 
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 

AttributeError: модуль ' основной 'не имеет атрибута' spec '

ответ

0

Проблема, с которой вы столкнулись, заключается в том, что multiprocessing doesn't work in the (i)python shell on Windows. Ноутбук избегает этой проблемы, в основном, магии. По умолчанию Ecospold2DataExtractor использует многопроцессорную обработку, чтобы ускорить извлечение многих файлов Ecospold2. Вероятно, это возможно сделать необязательным; на данный момент, вы можете выполнить одно из следующих действий:

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

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

Is there a reason the modules should run differently in IPython than in Jupyter Notebooks?

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

I was thinking of using PyAutoGUI to send inputs to the Brightway2 environment and IPython. Is there an easier/better way to do that?

GUIs are hard - вы можете написать один!

Is there a way to import the necessary Brightway modules without running in the Brightway2 environment?

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

+0

Это имеет смысл. Я по существу выполнил ваше предложение и сделал проект и импортировал данные один раз, а затем использовал сценарии для его запуска.

There is no Brightway2 environment - just a set of python packages that can be imported. You can import them separately (though some depend on each other), e.g. bw2calc can be run independent of everything else.
Jim

+0

Я все еще редактировал комментарий и перешел через 5-минутное окно. Я всегда запускаю bw2-env.bat, что позволяет мне импортировать brightway2, что я не могу сделать иначе. – Jim

+0

«GUI - это сложно - вы можете написать его!» О, я не собираюсь писать графический интерфейс. Вероятно, вы можете сказать, что это вне моего набора навыков. Я просто использую pyautogui для отправки текста для запуска IPython и моих скриптов после запуска bw2-env.bat. Спасибо вам за помощь. – Jim

Смежные вопросы