私は、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
いくつかの問題が発生しています。
conda list
にリストされているにもかかわらず、パッケージをインポートできません(すべてを再確認しましたが、正しいインタープリターを使用しています)。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
ここで何が欠けているのですか、どうすれば適切にパッケージ化できますか?
問題は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の問題 が発生しています。