web-dev-qa-db-ja.com

Pythonのsetup.pyにローカル依存関係を含めてインストールする方法は?

アプリケーションを配布するためにsetup.pyを作成しています。このアプリケーションには、pipを介してインストールできるいくつかの依存関係があります。また、PyPIからインストールできないいくつかのカスタム依存関係もあります。

そこで、ディストリビューションに含まれるcustom_package_0.1.whlを作成しました。これは、setup.pyinstall_requiresからすべてをインストールした後に依存関係としてインストールする必要があります。

次のアプリ構造を想像してみてください。

my_app/
    win_deps/custom_package_0.1.whl
    my_app/
        __init__.py
        main.py
        setup.py
        setup.cfg

それ、どうやったら出来るの?

14
minerals

可能ですが、使用するsetuptoolsのバージョンがわかりません。手順:

setup.pyで

setup(
  ...,
  install_requires=['my-package'],
  dependency_links=[
    # location to your Egg file
    os.path.join(os.getcwd(), 'deps', 'my_package-1.0.0-py3.5.Egg')
  ]
)

重要なことは、あなたの場所がURLパターンテストに合格してはならず、Eggファイル名の構造が<package_name_with_no_hyphens>-<version>-<py_version>.Eggである必要があるということです。

1
wiesiu_p

選択できるオプションがいくつかあります。

  1. パッケージをサーバーにアップロードし、URLにdependency_linksを指定します。
  2. ホイールファイルを使用する代わりに、pythonパッケージをmy_appパッケージ内に配置し、それをpackagesパラメーターにリンクすることができます。
  3. もっとハッキーな方法は、setuptools apiを使用して、自分でパッケージをインストールすることです。
1
Gal Ben David

Wiesiu_pの答えを拡張して、独自のsetup.pyを持つソースディレクトリにリンクすることで依存関係をインストールできます。

依存関係my-dependencyのソースファイルがあり、my-dependencyのルートに独自のsetup.pyがあるとします。アプリケーションのsetup.py

setup(
  ...,
  install_requires=['other-dependency','my-dependency'],
  dependency_links=[
    # location to your my-dependency project directory
    ''.join(['file:\\', os.path.join(os.getcwd(), 'path', 'to', 'my-dependency#Egg=my-dependency-1.0')])
  ]
)

これで、アプリケーションのpython setup.py installを指定してsetup.pyを実行すると、my-dependencyがインストールされます。

1
Anfernee