[python]自問自答:python-mパラメータ?

3758 ワード

python -m xxx.py
作用は:xxx.pyファイルはモジュールとして起動しますが、モジュールとして起動するのに何の役に立つのか分かりません.python xxx.pyとpython-m xxx.pyの違いは何ですか.
自問自答:
  • python xxx.py
  • python -m xxx.py

  • これはpyファイルをロードする2つの方法です.1は直接実行と呼ばれ、2はimportに相当し、モジュールとして起動します(注意:ただし__name__の値は'main')
    pyファイルをロードする方法によって、主に影響があります.sys.pathという属性.sys.pathはliunxのPATHに相当する.
    次にsysを見てみましょう.path
    >>> import sys
    >>> sys.path
    ['', '/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python27.zip',  
    ...]

    上の内容は1段だけ切り取った.現在のpython解釈器が実行されている環境で、python解釈器はこれらのディレクトリの下で依存するライブラリを探します.注記一点:'--現在のディレクトリ***
    次の2つの例では、同じファイルを異なる方法で起動します.sys.pathプロパティの値の違い.
    # run.py     
    import sys
    print(sys.path)
    
    #     :python run.py
    test_import_project git:(master) ✗ python run.py
    ['/Users/sx/Documents/note/test_py/test_import_project',  
     '/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python27.zip',  
      ...]
    #        :python -m run.py
    test_import_project git:(master) ✗ python -m run.py
    ['',  
     '/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python27.zip',

    注意深い学友会は発见して、区别は第1行です.直接起動するのはrunです.pyファイル、ディレクトリがsysに置かれています.pathプロパティ.モジュール起動は、コマンドを入力ディレクトリ(つまり現在のパス)をsysに配置します.パス属性の***
    仕事のシーンで何の役に立ちますか?
    #       
    package/
        __init__.py
        mod1.py
    package2/
        __init__.py
        run.py  
    # run.py     
    import sys
    from package import mod1
    print(sys.path)

    runを起動するにはどうすればいいですか?pyファイル?
    #     (  )test_import_project git:(master) ✗ python package2/run.py
    Traceback (most recent call last):
      File "package2/run.py", line 2, in <module>
        from package import mod1
    ImportError: No module named package
    
    #        (  )test_import_project git:(master) ✗ python -m package2.run
    ['',
    '/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python27.zip',
    ...]

    起動するpyファイルがモジュールを参照している場合.起動時にsysを考慮する必要があることに注意してください.pathにはあなたのimportのモジュールのパスがありますか?このとき、直接起動を使うのか、それともモジュールで起動するのか.目的はimportのモジュールのパスをsysに置くことです.path中.分かったか?
    公式文書参照:http://www.pythondoc.com/pythontutorial3/modules.html
    mod 1というモジュールをインポートすると、解釈器はまず現在のディレクトリでmod 1という名前を検索する.pyのファイル.見つからなかったらsysに着きます.path変数で指定されたディレクトリリストで検索します.sys.path変数の初期値は次のとおりです.
  • スクリプトのディレクトリ(現在のディレクトリ)を入力します.
  • 環境変数PYTHONPATHが示すディレクトリリストの検索(shell変数PATHと同様の構文、すなわち一連のディレクトリ名のリスト).
  • Pythonのデフォルトのインストールパスで検索します.実際、解釈器はsys.path変数は、初期化時にデフォルトで入力スクリプト(または現在のディレクトリ)、PYTHONPATH、およびインストールディレクトリを含むパスディレクトリ検索モジュールを指定します.これにより、Pythonプログラムは、モジュール検索ディレクトリを変更または置換する方法を理解することができます.

  • これで終わります:弟の言語表現能力は限られていて、間違いがあれば、指摘してください.困ったことがあったら、何度も見て、demoを直してください.