問題タブ [packaging]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Setuptoolsと代替案に関する質問
最近、インターネット上でかなりのsetuptoolsがバッシングしているのを見てきました。最近、私はJamesBennettのOnpackagingの投稿を読んで、なぜ誰もsetuptoolsを使用すべきではないのかについて説明しました。Freenodeの#pythonで過ごした時から、絶対にそれを嫌う魂が数人いることを知っています。私はそれらの中に自分自身を数えますが、私は実際にそれを使用します。
私はその欠陥を認識するのに十分なプロジェクトにsetuptoolsを使用しましたが、もっと良いものを好みます。私は特にeggフォーマットとそれがどのように展開されるかが好きではありません。setuptoolsのすべての問題で、私はより良い代替手段を見つけられませんでした。
pipのようなツールについての私の理解は、それがeasy_installの置き換え(setuptoolsではない)であることを意図しているということです。実際、pipはいくつかのsetuptoolsコンポーネントを使用していますよね?
私のパッケージのほとんどは、すべての依存関係を宣言するsetuptools対応のsetup.pyを利用しています。準備ができたら、sdist、bdist、bdist_eggを作成し、それらをpypiにアップロードします。
pipの使用に切り替えたい場合、easy_installの依存関係を取り除くためにどのような変更を加える必要がありますか?依存関係はどこで宣言されていますか?私は、egg形式の使用をやめ、ソース配布のみを提供する必要があると推測しています。もしそうなら、どうすればegg-infoディレクトリを生成できますか?または私もする必要がありますか?
これにより、virtualenvの使用法はどのように変わりますか?virtualenvはeasy_installを使用して環境を管理しませんか?
これにより、setuptoolsが提供する「develop」コマンドの使用法がどのように変わりますか?私はそれを使うべきではありませんか?代替手段は何ですか?
私は基本的に、開発ワークフローがどのようになるかを把握しようとしています。
誰かがそれを提案する前に、私はOSに依存する解決策を探していません。私は主にdebianlinuxに関心がありますが、Ian Bickingがここで概説している理由から、debパッケージはオプションではありません。
deployment - Java EE システムを構築するには? アプリケーションという用語、したがって EAR の内容はどのように定義されていますか?
Java EE 5 で開発された大規模なソフトウェア システムのビルド システムとディレクトリ構造を設計中です。ビルド システムは ant を使用して実装されます。
テーマごとにグループ化された複数の異なるサービスがあります。各サービスは、Web サービスまたは EJB のいずれかを提供します。各サービスは、専用のアプリケーション サーバー クラスターで実行されます。したがって、複数のクラスターがあり、これらのクラスターの一部は、トピックによって論理的にグループ化できます。
一般的な定義と例を読みましたが、Java EE の用語についてはまだ混乱しています。
- Java EE アプリケーションとは では、EAR ファイルの内容は何でしょうか?
- Java EE プロジェクトとは? (この用語は、Netbeans だけでなく、Java Blueprints Guidelines Project Conventions for Enterprise Applications でも使用されています)
すべての EJB および WAR-module-package-files を 1 つの EAR に配置して、この 1 つの EAR に完全なシステムを含める必要がありますか?
それとも、これらのサービスは論理的にのみグループ化されており、技術的にはグループ化されていないという事実にもかかわらず、サービスの各グループを 1 つの EAR に入れる必要がありますか?
それとも、サービスごとに個別の EAR をアセンブルしますか。つまり、ほとんどの場合、単一の EJB jar ファイルのみを含み、場合によっては EJB と WAR ファイルを含みますか?
それとも、アプリケーションの概念を無視して、EJB ファイルと WAR ファイルを構築するだけで、アプリケーション サーバー クラスタごとに 1 つのデプロイメント ファイルしか持たないのでしょうか?
私の主な質問は、EAR ファイルをパッケージ化する利点は何ですか?
現時点では、必要なのは EAR-EJB と WAR ファイルだけで、さらに ant-build-system のネストされたサブプロジェクトの概念とソースのディレクトリ構造が必要ですか?
編集:答えてくれてありがとう!耳にパッケージ化されたアプリケーションは、かなり原子的なサブシステムのように思えます。したがって、ネストされたサブプロジェクト構造 (論理的にのみ、ビルド システムとソースのディレクトリ構造でのみ可視) とかなり大量の EAR があり、それぞれにほとんど 1 つの ejb-jar しか含まれていないと思います。および/または war モジュールと単一のサービスの実装 (単一のアプリケーションサーバークラスターにデプロイされます)。
python - Gnome で Python パッケージの「.desktop」ファイルとアイコンを配布する方法 (distutils または setuptools を使用)?
現在、私は自動ツールを使用して自分のプロジェクトをビルド/インストールおよびパッケージ化していますが、より「Pythonic」な感じのものに移行したいと思っています。
私のプロジェクトは、2 つのスクリプト、1 つのモジュール、2 つのグレード GUI 記述、および 2 つの .desktop ファイルで構成されています。現在は純粋な python プロジェクトですが、すぐに変更される可能性があります。
setuptools を見ると、.desktop ファイル以外のすべてを処理する方法が簡単にわかります。Gnome がそれらを見つけられるように、特定のディレクトリに配置する必要があります。
最初に distuils/setuptools を使用するのは良い考えですか?
packaging - 個々のautotoolsプロジェクトを別の「プロジェクト」にグループ化する最良の方法は何ですか?
「ライブラリのライブラリ」を作成し、autotoolsetを使用して個々のプロジェクトを管理したいと思います。さらに、ライブラリのセット全体を同時に構築できるようにしたいと思います。
個々のライブラリ:
- libyarconveniencezzz
- libyarfoo
- libyarbar
- libyarbaz
トップレベルのMakefileを手作業で作成し、個々のライブラリ/コンビニエンスライブラリを独自のオートツールセットパッケージにする必要があるのではないかと思います。
私はこれと同様のことをしましたが(4、5年前)、参照コードを失いました。私が本当に覚えている唯一のことは、私が望むようにすべてをセットアップする前に、autotoolsをいじくり回して数ヶ月かかったことでした。
java - Spring の依存関係を使用して Java アプリケーションをパッケージ化して実行する
一連の依存関係 (Apache Commons libs など) と、Spring フレームワークへの依存関係を持つスタンドアロンの Java アプリケーションを作成しました。
私はこれを Eclipse で構築しましたが、正常に動作します。今、私はそれを本番環境にデプロイする必要があるので、すべての依存関係と一緒にパッケージ化する最良の方法と、それを呼び出す方法を見つけようとしています (コマンドラインから呼び出されます)。
強引な方法は、私のプロジェクトを jar としてエクスポートし、すべての依存 jar (およびその依存関係) を見つけて、それらを共通ディレクトリにコピーし、クラスパス上のすべてを含むシェル スクリプトを作成して実行することです。明らかに、それは愚かで退屈に思えます。
Ant、Maven を使用する必要がありますか? 依存するすべての Spring jar を 1 つの大きなファイルにパッケージ化する必要がありますか? これに対処するためのヒントは役に立ちます。
python - Python デーモンのパッケージ化のベスト プラクティス
Python で作成したツールがあり、通常はデーモンとして実行する必要があります。このツールを配布用にパッケージ化するためのベスト プラクティスは何ですか?特に、設定ファイルとデーモンの実行可能ファイル/スクリプトをどのように処理する必要がありますか?
関連して、特定のプラットフォーム (つまり、Linux のinitスクリプト、Windows のサービス、OS Xのlaunchd ) に応じて起動時に実行するデーモンをセットアップするための一般的なツールはありますか?
python - 依存関係をアプリケーションにバンドルするのが適切な (適切でない) のはいつですか?
概要
最近、私のアプリケーションの 1 つが依存しているフレームワークの作成者と会話をしました。その会話の中で、彼は余談として、彼のフレームワークを自分のアプリケーションにバンドルし、自分のコードと一貫性があることがわかっているバージョンをエンド ユーザーに配信すれば、私の生活はよりシンプルになるだろうと述べました。直観的に、私は常にこれを避けようとしてきました。実際、プロジェクト全体を使用せずにコードの一部を再配布できるように、自分のコードをセグメント化するのに苦労しました (たとえ誰かが再利用する可能性がほとんどなかったとしても)。それ)。しかし、しばらく考えてみたところ、なぜこれを行うのか特に正当な理由を思いつくことができませんでした. 実際、考えてみると、バンドルするのにかなり説得力のあるケースが見えてきました。私のすべての小さな依存関係。私は賛否両論のリストを思いついた.誰かが私が見逃しているものを指摘できることを願っている.
長所
- バージョンの一貫性は、テストとトラブルシューティングが容易になることを意味します。
- インストールするコンポーネントが少ないように見えるため、アプリケーションはより多くのユーザーに届く可能性があります。
- 依存関係の小さな調整は、アップストリームのコード ベースに浸透するのを待つよりも、ダウンストリームで簡単に作成してアプリケーションと共に配信できます。
短所
- 依存関係を含めるためのより複雑なパッケージ化プロセス。
- ユーザーは、自分のマシンに依存関係の複数のコピーを作成することになる場合があります。
- bortzmeyer の回答によると、個々のコンポーネントをアップグレードできないという潜在的なセキュリティ上の懸念があります。
ノート
参考までに、私のアプリケーションは Python で書かれており、参照している依存関係は「軽い」ものです。つまり、小さく、あまり一般的に使用されていないということです。(したがって、それらはすべてのマシンやすべてのリポジトリに存在するわけではありません。) また、アプリケーションを「パッケージ化する」と言うときは、パッケージ内にあるスクリプトを使用してインストールするのではなく、独自のソース ツリーの下に配布することを意味します。バージョンが競合する可能性はありません。また、Linux のみで開発しているため、Windows のインストールの問題について心配する必要はありません。
そうは言っても、パッケージの依存関係のより広い(言語に依存しない)問題についての考えも聞きたいです。私が見逃しているものはありますか、それとも私が考えすぎているという簡単な決定ですか?
補遺1
私は下流のパッケージャーのニーズにも非常に敏感であることは言及しておく価値があります。ディストリビューション固有の Deb または RPM でアプリケーションをラップするのは、できるだけ簡単にしたいと考えています。
java - 複数の Java プロジェクトとリファクタリング
最近、複数の異なるプロジェクトを使用しているプロジェクトに参加しました。これらのプロジェクトの多くは、ライブラリに含まれる他のプロジェクトの JAR ファイルを使用して相互に依存しているため、1 つのプロジェクトを変更するたびに、他のどのプロジェクトがそれを使用しているかを知り、それらも更新する必要があります。私はこれをもっと簡単にしたいと思っており、このすべての Java コードを別のパッケージの 1 つのプロジェクトにマージすることを考えていました。これを行ってから、一部のパッケージのみを jar にデプロイすることは可能ですか。一部のみの展開はしたくないのですが、可能であればお邪魔させていただきました。
これを処理するより良い方法はありますか?
unix - クロスプラットフォームの展開に使用するパッケージ?
通常、Windows アプリケーションは MSI としてパッケージ化され、Redhat Linux では RPM としてパッケージ化されます。Unix と Windows のさまざまなフレーバーを含むすべてのプラットフォームにアプリケーションを展開するために使用できる最良のオープン ソース パッケージング方法は何でしょうか?
内容には、exe、UNIX バイナリ、Java jar ファイル、ユーザー データ、さらには実行するデータベース スクリプトが含まれます。
(コンテンツは宛先OSごとに異なることを認識しています。つまり、バイナリは異なります。win exeとunixバイナリなどですが、たとえば、構成ファイルは同じである場合や、Javaの場合はバイトコードjarでさえある場合があります)
パッケージでサポートしたい重要な機能は、ディレクトリごとに異なるユーザーとアクセス許可ですが、この機能をマルチプラットフォームでサポートすることは非常に難しい場合があることを認識しています。
python - Pythonモジュールがインストールされているのか、プログラムで開発モードになっているのかを把握する
私は「setup.pydevelop」モードでアプリを開発する傾向があります。プログラムが「setup.pyinstall」されたときに、構成を本番モードで自動的に切り替えたいと思います。
これは、インストールディレクトリに「setup.py」が含まれているかどうかを確認するなど、不十分なハッキングによって実行できますが、pkg_resourcesでこれを実行できるかどうか疑問に思います。