web-dev-qa-db-ja.com

pipを使用してgitサブディレクトリからインストールするにはどうすればよいですか?

私は多くのフォルダを持つgitリポジトリを持っていますが、そのうちの1つはpython pipでインストール可能なモジュールです、次のように:

repo.git/
repo.git/folder1/
repo.git/folder2/
repo.git/mymodule/
repo.git/mymodule/__init__.py
repo.git/mymodule/setup.py
repo.git/mymodule/...

今、私はインストールするために以下をしなければなりません:

git clone http://server/repo.git
cd repo
pip install mymodule
cd ..
rm -rf repo

明示的に複製せずに、pipでモジュールを直接インストールすることは可能ですか?

私は試した:

pip install git+https://server/repo.git/mymodule/
pip install git+https://server/repo.git:mymodule/

しかし、私は得る:

IOError: [Errno 2] No such file or directory: '/tmp/pip-88tlLm-build/setup.py'
63

この機能に関して プルリクエスト があり、1か月前にブランチを開発するためにマージされたようです。構文は following です。

pip install -e git+https://git.repo/some_repo.git#Egg=version_subpkg&subdirectory=repo # install a python package from a repo subdirectory

マスターにマージされて配布されるまで、おそらくしばらく待つ必要があります。

[〜#〜] update [〜#〜]:これは利用可能になり、 https://pip.readthedocs.io/en/stable/reference/pip_install /#vcs-support 次のとおり:

Setup.pyがプロジェクトのルートにないプロジェクトの場合、「サブディレクトリ」コンポーネントが使用されます。 「サブディレクトリ」コンポーネントの値は、プロジェクトのルートからsetup.pyが配置されている場所までのパスである必要があります。

リポジトリのレイアウトが次の場合:

- pkg_dir/
  - setup.py  # setup.py for package ``pkg``
  - some_module.py
- other_dir/
  - some_file
- some_other_file

使用する必要があります

pip install -e vcs+protocol://repo_url/#Egg=pkg&subdirectory=pkg_dir

注:Windowsでは、URLを二重引用符で囲む必要があります。そうしないと、「サブディレクトリが内部コマンドまたは外部コマンドとして認識されません」というエラーが表示されます。たとえば、次を使用します:

pip install -e "vcs+protocol://repo_url#Egg=pkg&subdirectory=pkg_dir"
86

コメントの1つ で正しい答えの下にすでに述べられていますが、この問題を強調するために:Linuxコマンドラインからこれを実行するとき、mustアンパサンドはコマンドラインにコマンドをバックグラウンドで実行するよう指示しているため、&-文字をエスケープします。

git+https://git.repo/some_repo.git#Egg=version_subpkg\&subdirectory=repo

アンパサンドの前のバックスラッシュに注意してください。エスケープ動作はLinuxディストリビューションに依存する場合があります。私は専門家ではありません。
これを無視すると、次のような不可解なエラーが発生する可能性があります。

bash: (...) command not found
14
rinderwahn