2016-11-29 10 views
1

package.pydにパッケージしようとしているファイルpackage.pyがあります。私はの場所を取得できますかpydファイルのパスを取得する方法__file__と同等のもの

Traceback (most recent call last): 
    File "C:\Projects\Wrapper.py", line 1, in <module> 
    import package 
    File "package.py", line 40, in init package (package.c:4411) 
NameError: name '__file__' is not defined 

を私は package.pyを実行すると正常に動作します package.py

CURR = os.path.dirname(os.path.realpath(__file__)) 

で次の文を持っていますが、私は別のファイルwrapper.pypackage.pydをインポートするとき、私は、次のエラーメッセージが表示されます.pydファイル。また、.pydまたは.pyとして実行されているかどうかを確認する方法もあります。

ありがとうございました!

答えて

1

__file__ variable not available in module initと思われます。モジュールがロードされた後 しかし、あなたは__file__を取得することができます:あなたがロードされたどのファイルを知ること__file__変数を確認することができます

def get_file(): 
    return __file__ 

。 また、Pythonの検索順序:pyd (so), py, pyw(for windows), pycも覚えておいてください。それについて

詳しい情報は、このthis question

発見2つの作業方法です。

  1. inspectモジュールを伴う:

    import inspect 
    import sys 
    import os 
    
    if hasattr(sys.modules[__name__], '__file__'): 
        _file_name = __file__ 
    else: 
        _file_name = inspect.getfile(inspect.currentframe()) 
    
    CURR = os.path.dirname(os.path.realpath(_file_name)) 
    
  2. import同じレベルからいくつかのファイルとその__file__属性使用:実際

    import os 
    from . import __file__ as _initpy_file 
    CURR = os.path.dirname(os.path.realpath(_initpy_file)) 
    

    を、それが__init__.pyモジュールである必要はありません。 [空の]ファイルを追加してインポートして機能させることができます。

+0

おそらく私は 'get_file()'を呼び出していて、おそらく '__file__ 'を探しているからです。私は実際に回避策を探しました。 'try-except'の環境変数:)です。しかし、私は.pyを.pydバイナリに変換しようとすると、新たな障害に遭遇しています。それは.pydに変換するときにdoes notが良い保持している.pyパッケージを作るときに、非常に多くのことが当然のことであるように見えます – coolarm

関連する問題