Abstract Programming Language Package Manager
Project description
抽象プログラミング言語パッケージマネージャー「grimo」
0. 利用方法
* 現在パッケージマネージャーは各々ご自身のAWSアカウントにおけるS3バケットに格納する形になっています。 バージョンアップに従って、全員共有バケットにする予定です。
- grimo install
pip install grimo
-
AWSのバケットとしてgrimoを作成
-
AWSのローカル設定を行う
export AWS_SECRET_ACCESS_KEY=xxx
export AWS_ACCESS_KEY_ID=xxx
コマンドラインオプション
利用可能なサブコマンド
install パッケージをインストールする(利用可)
upload パッケージをアップロードする(利用可)
search パッケージを検索する(未開発)
update パッケージをアップデートする(未開発)
uninstall パッケージをアンインストールする(未開発)
パッケージのアップロード
project/
├── metadata.json # パッケージのメタデータ
├── package_name/
│ ├── def.md # パッケージの定義
│ ├── util.md # パッケージのユーティリティ
│ ├── var.md # パッケージの変数
│ └── ...
{
"name": "package_name",
"version": "1.0.0",
"language": "python",
"description": "package_description",
"category": "ai",
"tags": [
"tool",
"development"
]
}
project ディレクトリ内で
grimo upload .
パッケージのインストール
インストールされたファイルはgrimoiresディレクトリに格納されます。 -v でバージョン指定をお願いします(ここも何も指定がない場合最新を取得するようにする予定です)
grimo install package_name -v version
project/
├── grimoires/
│ ├── package_name/
│ │ ├── metadata.json # パッケージのメタデータ
│ │ ├── def.md # パッケージの定義
│ │ ├── util.md # パッケージのユーティリティ
│ │ ├── var.md # パッケージの変数
│ │ └── ...
1. 目的
多様なプログラミング言語のパッケージを一元管理できる、強力かつユーザーフレンドリーな抽象プログラミング言語パッケージマネージャー「grimo」をPythonで実装する。grimoは、プログラミング言語に依存せず、あらゆるパッケージの検索、インストール、アップグレードをシームレスに実行できるツールを目指します。
2. パッケージの基本構造
grimo/
├── grimo/ # パッケージのコアロジック
│ ├── __init__.py
│ ├── core.py
│ ├── utils.py
│ ├── package.py # パッケージ操作関連モジュール
│ ├── storage.py # ストレージ操作関連モジュール
│ └── ...
├── tests/
│ ├── test_core.py
│ ├── test_utils.py
│ ├── test_package.py
│ ├── test_storage.py
│ └── ...
├── docs/
│ ├── conf.py
│ ├── index.rst
│ └── ...
├── README.md
├── LICENSE
├── setup.py
├── requirements.txt
├── Dockerfile
├── docker-compose.yml
├── .github/workflows/
│ ├── ci.yml
│ └── cd.yml
└── app.py # Streamlit/Gradio アプリケーション
3. setup.pyの記述
from setuptools import setup, find_packages
setup(
name='grimo',
version='0.1.0',
description='Abstract Programming Language Package Manager',
long_description=open('README.md', 'r').read(),
author='Your Name',
author_email='your@email.com',
url='https://github.com/your-username/grimo',
packages=find_packages(exclude=['tests']),
install_requires=[
'requests',
'click',
'colorama',
'boto3', # AWS SDK for Python
'streamlit', # or 'gradio'
],
entry_points={
'console_scripts': [
'grimo=grimo.cli:main',
],
},
classifiers=[
'Development Status :: 3 - Alpha',
'Intended Audience :: Developers',
'License :: OSI Approved :: MIT License',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
'Programming Language :: Python :: 3.10',
],
)
3. setup.pyを利用したPyPIへのアップロード方法
-
PyPIアカウントの作成:
- まず、PyPI にアカウントを作成します。
-
setup.py
の準備:setup.py
ファイルが正しく記述されていることを確認します。例として以下のような内容です。
from setuptools import setup, find_packages setup( name='grimo', version='0.1.0', description='Abstract Programming Language Package Manager', long_description=open('README.md', 'r').read(), author='Your Name', author_email='your@email.com', url='https://github.com/your-username/grimo', packages=find_packages(exclude=['tests']), install_requires=[ 'requests', 'click', 'colorama', 'boto3', 'streamlit', ], entry_points={ 'console_scripts': [ 'grimo=grimo.cli:main', ], }, classifiers=[ 'Development Status :: 3 - Alpha', 'Intended Audience :: Developers', 'License :: OSI Approved :: MIT License', 'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', ], )
-
必要なパッケージのインストール:
- パッケージをアップロードするために、
twine
をインストールします。pip install twine
- パッケージをアップロードするために、
-
パッケージのビルド:
- パッケージをビルドします。
python setup.py sdist bdist_wheel
- パッケージをビルドします。
-
PyPIへのアップロード:
twine
を使用してパッケージをPyPIにアップロードします。twine upload dist/*
-
アップロードの確認:
- アップロードが成功したかどうかをPyPIのウェブサイトで確認します。
これで、setup.py
を利用してパッケージをPyPIにアップロードする手順は完了です。
4. init.py の役割
- パッケージの初期化処理
__version__
変数でパッケージバージョンを定義- パッケージの公開APIをインポート
5. README.md の記述内容
- パッケージの概要: grimoの目的、機能、メリットを具体的に記述
- インストール方法:
pip install grimo
等の手順を明記 - 使用方法: 基本的なコマンド (
grimo install
,grimo search
など) の使用例を提示 - サポートするプログラミング言語とパッケージ: 具体的に記載
- ライセンス: パッケージのライセンス情報を記載
- 貢献方法: バグ報告、プルリクエスト、ドキュメント改善などの方法を説明
- サポート方法: 問い合わせ先 (メーリングリスト、Issue tracker、Slackチャンネルなど) を記載
6. LICENSE ファイル
- MIT License
- Apache License 2.0
- GNU General Public License (GPL)
- BSD License 上記から選択、またはその他の適切なライセンスを明記
7. パッケージのバージョン管理
- セマンティックバージョニング (MAJOR.MINOR.PATCH) を採用
8. テスト
- ユニットテストと統合テストを実施
unittest
モジュールを使用- テストケース: 正常系、異常系、境界値などを網羅
- カバレッジ測定:
coverage.py
などを使用 - CLIコマンドの実行結果を検証:
- 異なるコマンドラインオプション、引数の組み合わせをテスト
- 想定される標準出力、標準エラー出力を検証
- エラー処理 (不正な引数、ファイルが存在しない場合など) をテスト
9. ドキュメント作成
- Sphinx を使用し、以下の内容を記述
- インストール方法
- コマンドリファレンス:
grimo install
,grimo search
など、各コマンドの詳細な説明、オプション、使用例を記載 - APIドキュメント
- パッケージの依存関係
- 開発者向けドキュメント: 貢献方法、テスト方法、コーディング規約など
- ドキュメントはHTML形式で生成し、Vercel等を用いてWeb上に公開
10. Docker化とCI/CD
- Docker:
Dockerfile
でビルドと実行環境を定義docker-compose.yml
で複数コンテナ (アプリケーション、データベースなど) を定義
- CI/CD:
- GitHub Actions を使用
ci.yml
:- push, pull request 毎に実行
- コードチェック (flake8, pylint など)、テスト実行、カバレッジ測定
cd.yml
:- タグプッシュ時に実行
- Dockerイメージのビルド、Docker Hub への push
- PyPI へのパッケージリリース
11. Webアプリケーション (Streamlit/Gradio)
- UI:
- パッケージの検索:
- キーワード検索
- プログラミング言語、カテゴリ、タグによる絞り込み
- パッケージの詳細表示:
- パッケージ名、バージョン、説明、作者、ライセンス、依存関係などを表示
- README.md の内容を表示
- パッケージのインストール、アップデート、アンインストール:
- プログレスバーを表示
- エラー発生時はエラーメッセージを表示
- パッケージのアップロード:
- パッケージ名、バージョン、説明、プログラミング言語、カテゴリ、タグなどを設定
- パッケージファイルをアップロード
- パッケージの検索:
- バックエンド:
grimo
パッケージのコマンドを呼び出して処理を実行- AWS S3 などのストレージサービスと連携し、パッケージファイルを保存、取得
12. ストレージ
- AWS S3 を使用
- Terraform を使用して S3 バケットを作成、管理
- パッケージファイル (テキスト、画像、動画など) を保存
grimo.storage
モジュール:- S3 へのファイルアップロード、ダウンロード、削除機能を提供
- ファイルのメタデータ (パッケージ名、バージョン、説明など) を保存、取得する機能を提供
13. その他
- ロギング: 処理の記録、エラー発生時の原因究明に役立てる
- エラー処理: 想定されるエラーを適切に処理し、分かりやすいエラーメッセージを表示
- セキュリティ: パッケージのアップロード、ダウンロード時のセキュリティ対策を実施
- パフォーマンス: 処理速度の向上、リソース使用量の削減に取り組む
14. 開発体制
- チームで開発を行う場合は、GitHub Flow などの開発フローを定義し、円滑な開発を進める
15. 今後の展望
- パッケージの依存関係解決機能の追加
- 仮想環境管理機能の追加
- GUIクライアントの開発
- プラグイン機構による拡張性の向上
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
grimo-0.1.6.tar.gz
(255.1 kB
view details)
Built Distribution
grimo-0.1.6-py3-none-any.whl
(260.6 kB
view details)
File details
Details for the file grimo-0.1.6.tar.gz
.
File metadata
- Download URL: grimo-0.1.6.tar.gz
- Upload date:
- Size: 255.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8eba2c69a9d54b7838ce1bd6c5b058db340c208f5da0035e83ee995fe411b21d |
|
MD5 | eb5b08c5699ee4b5de1e19c0c509a05c |
|
BLAKE2b-256 | 01c97d49c7dd783f9de8396ad7eef224116e961213a45f0588388894ae4a0d48 |
File details
Details for the file grimo-0.1.6-py3-none-any.whl
.
File metadata
- Download URL: grimo-0.1.6-py3-none-any.whl
- Upload date:
- Size: 260.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0b06ead9456c43758c5ffb069f7b2d8b829ae5ea61a5c05eb98a1397d8aacd7c |
|
MD5 | e57fa917d4e08cda93f7e890e3a3bfe5 |
|
BLAKE2b-256 | 4f336f22ff94700d510c2e34a126db4622ebfadc1ca82cf0c20e7dcf1eebbf99 |