web-dev-qa-db-ja.com

カスタムcondaパッケージのconda UnsatisfiableErrorを修正するにはどうすればよいですか?

私は、Anacondaクラウドで公開するためにmy pythonコードをパッケージ化しようとしています。フォルダ構造は次のようになります。

.
├── conda-recipe
│   ├── build.bat
│   ├── build.sh
│   └── meta.yaml
├── demos
│   ├── datasets
│   │   ├── com-Amazon.all.dedup.cmty.txt
│   │   ├── com-Amazon.ungraph.txt
│   │   ├── email-Eu-core-department-labels.txt
│   │   └── email-Eu-core.txt
│   ├── directed_example.ipynb
│   ├── email_eu_core_network_evaluation-Copy1.ipynb
│   ├── node_classification.ipynb
│   └── zacharys_karate_club_evaluation.ipynb
├── LICENSE.txt
├── README.md
├── setup.py
├── sten
│   ├── embedding.py
│   └── __init__.py
├── test
│   ├── __init__.py
│   └── test_system.py
├── zachary_computed.png
└── zachary_expected.png

meta.yamlファイル:

package:
  name: sten
  version: "0.1.0"

source:
  path: ..

build:
  number: 0
  noarch: generic

requirements:
  build:
    - python >=3.7
    - setuptools
  run:
    - python >=3.7
    - pypardiso >=0.2.2
    - numpy >=1.18.1
    - networkx >=2.4
    - scipy >=1.4.1
    - markdown


test:
  imports:
    - sten.embedding

about:
  home: https://github.com/monomonedula/simple-graph-embedding
  license: Apache License 2.0
  license_file: LICENSE.txt
  summary: Simple deterministic algorithm for generating graph nodes topological embeddings.

パッケージのビルドに使用しているコマンド(haasadはpypardisoパッケージのチャネルの名前です):conda build conda-recipe -c haasadビルドは成功し、ここにアップロードしました https://anaconda.org/ monomonedula/sten

ただし、次のように両方のローカルビルドを使用してインストールした後:conda install sten --use-local -c haasadおよびクラウドにアップロードされたビルドconda install -c monomonedula sten -c haasadいくつかの問題が発生しています。

  • python 3.7を使用すると、conda listにリストされているにもかかわらず、パッケージをインポートできません(すべてを再確認しましたが、正しいインタープリターを使用しています)。
  • python= 3.8を使用すると、インポートして使用できますが、不明な理由によりステラグラフをインストールできません。エラーメッセージ:
Collecting package metadata (current_repodata.json): done
Solving environment: failed with initial frozen solve. Retrying with flexible solve.
Solving environment: failed with repodata from current_repodata.json, will retry with next repodata source.
Collecting package metadata (repodata.json): done
Solving environment: failed with initial frozen solve. Retrying with flexible solve.
Solving environment: \ 
Found conflicts! Looking for incompatible packages.
This can take several minutes.  Press CTRL-C to abort.
failed                                                                                                                                                       

UnsatisfiableError: The following specifications were found to be incompatible with each other:

Output in format: Requested package -> Available versions

conda search sten -c monomonedula --infoの出力:

sten 0.1.0 py38_0
-----------------
file name   : sten-0.1.0-py38_0.tar.bz2
name        : sten
version     : 0.1.0
build       : py38_0
build number: 0
size        : 16 KB
license     : Apache License 2.0
subdir      : noarch
url         : https://conda.anaconda.org/monomonedula/noarch/sten-0.1.0-py38_0.tar.bz2
md5         : 53661562513861f9433b252c8ae7b5f4
timestamp   : 2020-05-23 19:24:36 UTC
dependencies: 
  - markdown
  - networkx >=2.4
  - numpy >=1.18.1
  - pypardiso >=0.2.2
  - python >=3.7
  - scipy >=1.4.1

sten 0.1.0 py38_0
-----------------
file name   : sten-0.1.0-py38_0.tar.bz2
name        : sten
version     : 0.1.0
build       : py38_0
build number: 0
size        : 16 KB
license     : Apache License 2.0
subdir      : noarch
url         : https://conda.anaconda.org/monomonedula/noarch/sten-0.1.0-py38_0.tar.bz2
md5         : 53661562513861f9433b252c8ae7b5f4
timestamp   : 2020-05-23 19:24:36 UTC
dependencies: 
  - markdown
  - networkx >=2.4
  - numpy >=1.18.1
  - pypardiso >=0.2.2
  - python >=3.7
  - scipy >=1.4.1

conda search stellargraph -c stellargraph --infoの出力:

stellargraph 1.0.0 py_0
-----------------------
file name   : stellargraph-1.0.0-py_0.tar.bz2
name        : stellargraph
version     : 1.0.0
build       : py_0
build number: 0
size        : 7.8 MB
license     : Apache Software
subdir      : noarch
url         : https://conda.anaconda.org/stellargraph/noarch/stellargraph-1.0.0-py_0.tar.bz2
md5         : e62b9c897d0a5481159c1e7cb8024717
timestamp   : 2020-05-05 07:54:44 UTC
dependencies: 
  - gensim >=3.4.0
  - ipykernel
  - ipython
  - matplotlib >=2.2
  - networkx >=2.2
  - numpy >=1.14
  - pandas >=0.24
  - python >=3.6
  - scikit-learn >=0.20
  - scipy >=1.1.0
  - tensorflow >=2.1.0

レポ

ここで何が欠けているのですか、どうすれば適切にパッケージ化できますか?

4
monomonedula

問題はmeta.yamlファイルにあります。 Anacondaブログの投稿によると

Noarch汎用パッケージにより、ユーザーはドキュメント、データセット、およびソースコードをcondaパッケージで配布できます

そして

Noarch Pythonパッケージは、複数の異なる純粋なPython異なるアーキテクチャ上のパッケージおよびPythonバージョンでのソートにより、ビルドのオーバーヘッドを削減しましたプラットフォームとPythonインストール時のバージョン固有の違い

純粋なpythonパッケージを配布するため、noarch: pythonを使用する必要があります。また、pythonバージョンをbuildおよびrun。更新されたmeta.yamlを以下に含めました。また、その中にビルドスクリプトが含まれているため、build.shおよびbuild.batファイルは必要なくなりました。また、ライセンス部分をcondaが受け入れるものに修正します(まだApache 2.0です)。

package:
  name: sten
  version: "0.1.0"

source:
  path: ..

build:
  number: 0
  noarch: python
  script: {{ PYTHON }} setup.py install

requirements:
  build:
    - python
    - setuptools
  run:
    - python
    - pypardiso >=0.2.2
    - numpy >=1.18.1
    - networkx >=2.4
    - scipy >=1.4.1
    - markdown

test:
  imports:
    - sten.embedding

about:
  home: https://github.com/monomonedula/simple-graph-embedding
  license: Apache-2.0
  license_family: Apache
  license_file: LICENSE.txt
  summary: Simple deterministic algorithm for generating graph nodes topological embeddings.

上記のmeta.yamlファイルを使用してこのパッケージをビルドおよびインストールするために使用した手順は次のとおりです。

git clone https://github.com/monomonedula/simple-graph-embedding
cd simple-graph-embedding/
git checkout 'refactor&cleanup'
# Replace contents of `meta.yaml`
rm conda-recipe/build.sh conda-recipe/build.bat
conda create --yes -n testing python=3.7 conda-build conda-verify
conda activate testing
conda-build --channel haasad .

そして、これは私が3.7環境にパッケージをインストールするためにしたことです。 sten-0.1.0-py_0.tar.bz2ログ出力の下部にあるconda-buildへの完全パスが見つかります。

conda install -n testing /home/jakub/miniconda3/envs/testing/conda-bld/noarch/sten-0.1.0-py_0.tar.bz2
conda activate testing
$CONDA_PREFIX/bin/python -c "import sten"

また、python 3.8環境でのインストールをテストしました。

conda create --yes -n testing3.8 python=3.8
conda install -n testing3.8 /home/jakub/miniconda3/envs/testing/conda-bld/noarch/sten-0.1.0-py_0.tar.bz2
conda activate testing3.8
$CONDA_PREFIX/bin/python -c "import sten"

conda install --use-local stenが機能しません- GitHubの問題 が発生しています。

2
jakub