运行 来自其他程序的 brightway2 模型
Running brightway2 models from other programs
我想 运行 Brightway2 在优化框架内 (https://brightwaylca.org/)。
基本上,我想创建一个 Python 脚本,将输入文件发送到外部模型(也在 Python 中)并获取输出。该脚本然后将 activity 数据写入 Brightway 数据库,然后 运行 Brightway2 以获得 LCA 分数。然后,该分数将用于根据优化算法更新输入文件。
Brightway2 似乎非常适合此类项目,但我在实施时遇到了困难。基本上,我想知道最简单的方法是什么。我有外部模型和优化算法。
到目前为止,我已经将 Jupyter Notebooks 用于我的 Brightway2 模型,但是当我将笔记本转换为 python 模块并在 [=43] 的 Brightway2 环境中 运行 它们时,我经常会出错=]. IPython 中的模块 运行 与 Jupyter Notebooks 中的模块应该 运行 有什么不同的原因吗?
我正在考虑使用 PyAutoGUI 将输入发送到 Brightway2 环境和 IPython。有 easier/better 方法吗?
有没有办法在 Brightway2 环境中不使用 运行ning 来导入必要的 Brightway 模块?
谢谢
这是我在 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()
但是如果我在 bw2 环境中 运行 它在 IPython 中,它会在
上挂起 up/crashed
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: 模块 'main' 没有属性 'spec'
您 运行 遇到的问题是 。笔记本基本上通过魔法避免了这个问题。 Ecospold2DataExtractor
默认使用多重处理来加速许多 Ecospold2 文件的提取。这可能应该是可选的;现在,您可以执行以下操作之一:
- 您应该只需要导入 ecoinvent 3.2 一次,因此这可以在 a) 笔记本中完成,或 b) 在命令行上调用的单独 python 脚本中完成。
- 使用编写导入脚本然后导入的技巧,而不是直接在 python 会话中进行导入(有关详细信息,请参见上面的 SO link)。
回应其他questions/concerns:
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?
GUI很难,欢迎大家写一个!
Is there a way to import the necessary Brightway modules without running in the Brightway2 environment?
没有 Brightway2 environment
- 只有一组 python 包可以导入。您可以单独导入它们(尽管有些相互依赖),例如bw2calc
可以 运行 独立于其他一切。
我想 运行 Brightway2 在优化框架内 (https://brightwaylca.org/)。
基本上,我想创建一个 Python 脚本,将输入文件发送到外部模型(也在 Python 中)并获取输出。该脚本然后将 activity 数据写入 Brightway 数据库,然后 运行 Brightway2 以获得 LCA 分数。然后,该分数将用于根据优化算法更新输入文件。
Brightway2 似乎非常适合此类项目,但我在实施时遇到了困难。基本上,我想知道最简单的方法是什么。我有外部模型和优化算法。
到目前为止,我已经将 Jupyter Notebooks 用于我的 Brightway2 模型,但是当我将笔记本转换为 python 模块并在 [=43] 的 Brightway2 环境中 运行 它们时,我经常会出错=]. IPython 中的模块 运行 与 Jupyter Notebooks 中的模块应该 运行 有什么不同的原因吗?
我正在考虑使用 PyAutoGUI 将输入发送到 Brightway2 环境和 IPython。有 easier/better 方法吗?
有没有办法在 Brightway2 环境中不使用 运行ning 来导入必要的 Brightway 模块?
谢谢
这是我在 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()
但是如果我在 bw2 环境中 运行 它在 IPython 中,它会在
上挂起 up/crashed 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: 模块 'main' 没有属性 'spec'
您 运行 遇到的问题是 Ecospold2DataExtractor
默认使用多重处理来加速许多 Ecospold2 文件的提取。这可能应该是可选的;现在,您可以执行以下操作之一:
- 您应该只需要导入 ecoinvent 3.2 一次,因此这可以在 a) 笔记本中完成,或 b) 在命令行上调用的单独 python 脚本中完成。
- 使用编写导入脚本然后导入的技巧,而不是直接在 python 会话中进行导入(有关详细信息,请参见上面的 SO link)。
回应其他questions/concerns:
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?
GUI很难,欢迎大家写一个!
Is there a way to import the necessary Brightway modules without running in the Brightway2 environment?
没有 Brightway2 environment
- 只有一组 python 包可以导入。您可以单独导入它们(尽管有些相互依赖),例如bw2calc
可以 运行 独立于其他一切。