0

最適化フレームワーク ( https://brightwaylca.org/ )内で Brightway2 を実行したいと考えています。

基本的に、入力ファイルを外部モデル (これも Python) に送信し、出力を取得する Python スクリプトを作成したいと考えています。次に、スクリプトはアクティビティ データを Brightway データベースに書き込み、Brightway2 を実行して LCA スコアを取得します。このスコアは、最適化アルゴリズムに基づいて入力ファイルを更新するために使用されます。

Brightway2 はこの種のプロジェクトに適しているようですが、実装に問題があります。基本的に、これを行う最も簡単な方法を知りたかったのです。外部モデルと最適化アルゴリズムがあります。

これまで、Brightway2 モデルに Jupyter Notebook を使用してきましたが、ノートブックを Python モジュールに変換して IPython の Brightway2 環境で実行すると、よくエラーが発生します。IPython と Jupyter Notebook でモジュールを異なる方法で実行する必要がある理由はありますか?

PyAutoGUI を使用して Brightway2 環境と IPython に入力を送信することを考えていました。それを行うためのより簡単な/より良い方法はありますか?

Brightway2 環境で実行せずに、必要な 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 で実行すると、ハングアップ/クラッシュします。

 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 'がありません

4

1 に答える 1