2017-07-25 3 views
1

私はpythonプロジェクトでgit-submoduleを使用しています。Gitサブモジュールは、一度Pythonプロジェクトで使用されたインポートエラーを発生させます。

サブモジュールプロジェクトは、次のようになります。

-submodule_project 
    - __init__.py 
    - debug_util.py 
    - parsing_util 
     - __init__.py 
     - parse.py 
     - consts.py 

parse.py輸入debug_util.py。 サブモジュールが独立したプロジェクトであるため、この構造は正常に機能します。私は私のプロジェクトでGitのサブモジュールとしてサブモジュールを使用したらそう、parse.pyImportErrorを提起

-project 
    - __init__.py 
    - file1.py 
    - some_dir 
     - __init__.py 
     - main.py 

私のプロジェクトは、このように構築されています。これは、debug_util.pyをインポートする行が実行されると発生します。ただ、明確にする :debug_util.py

をインポートmain.py輸入parse.pyが、あなたは私が間違ってやっているものを私に説明でき、そしてこの問題を解決するために利用可能なソリューションは何ですか?あなたのすべてを事前に

[submodule "submodule_project"] 
path = submodule_project 
url = ../submodule_project.git 

ありがとう:

は、ここに私の.gitmodulesファイルです!

+0

'parse.py'がインポートされる' main.py'と 'debug_util.py'がインポートされる' parse.py'の行を表示できますか? – onlynone

+0

また、 'main.py'を起動する方法と場所を表示できますか?同様に、サブモジュールプロジェクト内から 'parse.py'をどのようにして正常に実行できるか、どのように表示することができますか? – onlynone

答えて

0

Git Submodulesは、(少なくとも彼らが私と一緒に遊んでいたときは)非常に迷惑です。私はサブモジュールを使用しないで、単にPython独自の依存関係管理を使用することをお勧めします。したがって、submodule_projectは独自の固有の名前を持ち、myparser-1.2.1のようなリリースでパッケージ化され、メインプロジェクトはsetup.pyからそのパッケージに依存します。 (gitのドキュメントから)Gitのサブモジュールと

問題:

あなたは、デフォルトでは、あなたがサブモジュールが含まれているディレクトリを取得するには、[サブモジュールとのプロジェクト]をクローン
  • 、まだその内のファイルのいずれも
  • ローカルの設定ファイルを初期化するために git submodule initを、そして git submodule updateはそのプロジェクトからすべてのデータをフェッチし、適切なチェックアウトは、新しいブランチを作成した場合、あなたの親プロジェクト
  • に記載されているコミットが、そこにサブモジュールを追加する:
  • あなたは、2つのコマンドを実行する必要があります、brに切り替えてくださいそのサブモジュールがない場合はサブモジュールディレクトリをまだトラッキングされていないディレクトリとして持っています
  • ディレクトリを削除するのは難しくありませんが、それを少し混乱させることができます。それを削除して、そのサブモジュールがあるブランチに戻った場合は、再投入するにはsubmodule update --initを実行する必要があります。
  • サブモジュールを使用している場合は、メインプロジェクトのコードを操作しているときと同時にサブモジュールのコードを操作したいのでいくつかのサブモジュール)。それ以外の場合は、より単純な依存関係管理システム(MavenやRubygemsなど)を使用している可能性があります。Gitのサブモジュール(私自身の観察)と

問題:

  • あなたはしばしば奇妙な状態であなたのサブモジュールを見つける:
    • あなたがコミット特定のgitでサブモジュールをペグしたかったが、今それは何とか漂っていて、あなたのトップレベルのプロジェクトはあなたのサブモジュールに関わる変更があると言います。
    • 何らかの形でファイルがサブモジュールディレクトリ内で変更を続け、gitはトップレベルまたはサブモジュールの不安定な変更について不満を持ちます。
    • サブモジュールがmasterを追跡したがっているが、正しく動作していないため、上流にないマージコミットがある。
  • それはupdateinit 1つのレベルの深サブモジュールが、あなたのサブモジュールの一つでもサブモジュールを使用している場合は何に十分迷惑なんですか?
  • 多くのサードパーティツールは、サブモジュールではうまく機能しません。私は多くのサードパーティのツール(gitのIDEやWebインターフェイスのように)は実際にgitのコア部分を扱っていないことを発見しました(ステージングエリア、マージ、リベース、メッセージなど)がありますが、めったに使用されていない経験豊富なgitユーザーであっても機能は特に悪いです。

また、トップレベルプロジェクトからサブモジュールを設定する方法と場所についても言及していません。最上位プロジェクトから.gitmodulesファイルを貼り付けた方が便利です。

+0

あなたのコメントをありがとう、モジュールファイルを追加しました。まだgitサブモジュールの範囲で解決策を探していますが、あなたが提案したことをどうやって行うのかを私に紹介できますか? – NI6

+0

プロジェクトごとに 'setup.py'ファイルが必要です(https://docs.python.org/2/distutils/introduction.html)。それぞれのpythonパッケージのソースディレクトリが最上位のgitソースディレクトリの下にくるようにします。サブモジュールプロジェクトの最上位レベルには、 'setup.py'と、' debug_util.py'と 'parsing_util'などを含むフォルダ、' myparser'などがあります。メインプロジェクトのトップレベルには、 'setup()'の呼び出しで 'install_requires = ['myparser']'を持っていることを確認して 'setup.py'を持っていて、' file1 .py'、 'some_dir'などです。 – onlynone

関連する問題