2016-06-17 5 views
0

私はラップしてPythonにインポートする古いFortranコードをf2pyで使用しています。 Fortranコードは、同じディレクトリにあるデータファイルに依存しています。私がそのディレクトリでPythonを起動すると、すべて正常に動作します。f2pyでの外部データファイルの使用

しかし、このモジュールを別の場所からインポートした場合、ファイルをローカルで検索して明らかに見つけることができません。

モジュールにどこでFortranコード(または別の巧妙な方法)を実行するかを伝える方法はありますか?

答えて

0

私はf2pyについてよく分かりませんが、コマンドラインバージョンとモジュールバージョンがあるようです。

commmandラインオプションを使用するには、私は2つのオプションを参照してください。ラッパーのラッパー

でコマンドラインを巻きパス

  • を見つけるために、FORTRANを変更

    1. を、あなたは

      #!/bin/sh 
      dir=$(dirname $0)  # gets relative path 
      dir=$(readlink -f $dir) # to get absolute 
      cd $dir 
      # Now call p2py 
      

      modを使用している場合は、次のようになります。 ULE版、あなたはあなたのpythonized Fortranソースを実行する前に、ディレクトリを変更するos.chdir()を使用することができます:私は考えることができる

      fortran_file = "foo.f" 
      dir = os.path.dirname(os.path.abspath(fortran_file)) 
      os.chdir(dir) 
      # Now run p2py against fortran_file 
      

      唯一の他のオプションは、Fortranコードへのパスを注入することができるかどうかを確認することです。たぶんあなたは、コードを読んで、メモリ内のソースのパスを変更してから、その動的に変更されたコードに対してf2py.compile()を使用することができます。

  • +0

    okですが、このために、指定したパスから読み込み、そのfortran-moduleを呼び出すPythonラッパーを書くようにfortranコードを変更する必要があります。モジュールが存在する場所で実行するようにf2pyモジュールに指示する(簡単な)方法はありませんか? –

    +0

    @JohnSmith ok、より多くの文脈を得るために 'f2py'を読んでください。更新された答え。 – rrauenza

    +0

    ありがとう、モジュールのパスに変更するラッパーは、おそらく最も簡単です、私はこれで行くでしょう。 –

    関連する問題