首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从其他程序运行brightway2模型

从其他程序运行brightway2模型
EN

Stack Overflow用户
提问于 2016-11-07 14:53:15
回答 1查看 260关注 0票数 0

我希望在优化框架(https://brightwaylca.org/)中运行https://brightwaylca.org/

基本上,我希望创建一个Python脚本,该脚本将一个输入文件发送到外部模型(也是Python中的)并获取输出。然后,脚本将将活动数据写入Brightway数据库,然后运行Brightway2以获得LCA评分。然后,这个分数将用于根据优化算法更新输入文件。

对于这类项目,Brightway2似乎是独一无二的,但我在实现上遇到了困难。基本上,我想知道做这件事最简单的方法是什么。我有外部模型和优化算法。

到目前为止,我已经在我的Brightway2模型中使用了木星笔记本,但是当我将笔记本转换为python模块并在Brightway2环境中IPython中运行它们时,经常会出现错误。这些模块在IPython中的运行方式与木星笔记本中的运行方式有何不同?

我正在考虑使用PyAutoGUI向Brightway2环境和IPython发送输入。有什么更简单的方法吗?

是否有一种方法可以导入必要的Brightway模块,而无需在Brightway2环境中运行?

谢谢

这是一个IPython错误的例子,但不是木星的错误。当我在木星中运行以下代码时,注意到它运行得很好。

代码语言:javascript
复制
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环境中运行它,它就会挂断/崩溃。

代码语言:javascript
复制
 ei = SingleOutputEcospold2Importer(data_directory, database_name)

它给出了以下错误:

代码语言:javascript
复制
-------------------------------------------------------------
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-08 10:21:54

您遇到的问题是在Windows上(i)python shell中,多处理不起作用。笔记本基本上是通过魔法来避免这个问题的。默认情况下,Ecospold2DataExtractor使用多处理来加快许多Ecospold2文件的提取。这可能是可选的;就目前而言,您可以执行以下操作之一:

  1. 您应该只需要导入一次ecofive3.2,这样就可以在( a)笔记本或b)命令行调用的单独python脚本中完成这一工作。
  2. 使用编写导入脚本的方法,然后导入该脚本,而不是直接在python会话中导入(有关更多细节,请参见上面的SO链接)。

针对其他一些问题/关切:

这些模块在IPython中的运行方式与木星笔记本中的运行方式有何不同?

不是的。任何时候发生这种情况都应该报告为作为一只虫子

我正在考虑使用PyAutoGUI向Brightway2环境和IPython发送输入。有什么更简单的方法吗?

GUI很难--欢迎您写一个!

是否有一种方法可以导入必要的Brightway模块,而无需在Brightway2环境中运行?

没有Brightway2 environment --只有一组可以导入的python包。您可以单独导入它们(尽管有些是相互依赖的),例如bw2calc可以独立于其他任何东西运行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40468097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档