コンテキスト
個人的な背景:
Pythonを学んでおり、これをNoSQLデータベースの自然言語処理に適用したいLinux経験のないユーザーです。
GNU/Linux を選択する理由:
予算が不足しており、既存のデバイスがまったく壊れていませんが、Windowsが負担することはできません。一度、品質、保証、文書、そして優れたアフターサービスで確固たる評判を得たメーカーの新しい最高級ワークステーションにお金を投資してみてください。似たようなことを経験したこれ。もうそうしないでください。 GNU / Linuxはカスタマイズ可能で、正しい設定を使用すると非常に軽量です。
設定:
私はすでにMX-19とFluxboxを「デスクトップ環境」として実行し、もう1つはFedora 34とLXQTを実行しています。私が知っている限り、ArchやGentooを使って別の環境を設定することを検討しています。これをインストールすると、UNIXに似たアーキテクチャをかなりよく理解し、実際に自分のコンピュータに合わせて調整できます。 Sam VimesがLady Sybilと恋に落ちたように、私はLinuxと恋に落ちました。最初は私が得ることができたことに満足していましたが、もっと学ぶほど愛されていました。
しかし、完全に葛藤がないわけではなく、悪戯を意図したものでもありません。
GNU/Linuxディストリビューションの問題はPythonの問題を複雑にします:
必要に応じて使用するほとんどのアプリケーションとライブラリはPythonベースのパッケージですが、ディストリビューションの承認済みリポジトリには必ずしも含まれておらず、常に最新の状態ではありません(含まれている場合)。
私の仕事に加えて、これは私のお気に入りのProtonVPNクライアントとProtonMailブリッジにも当てはまります。私は私が所有しているすべてのシステムにそれをインストールします。 WindowsとAndroidでは簡単です。 DebianとFedoraはどちらもrpmをサポートしていますが、フォークディストリビューションは必ずしもそうする必要はありません。それで私は次善策を取らなければなりませんでした。
PyPIからインストールし、ソースからインストール:
だから私はPyPIを使ってインストールしてきました。
pyton3 -m pip install <packagename>
ソフトウェア製造元がPyPIのコピーを更新しない場合、またはソフトウェアの1つのみを更新し、他のソフトウェアは更新せず、両方が同じライブラリの異なるバージョンに依存している場合、依存関係の競合が発生します...まあ、始める必要があります。ソースコードのコンパイル。 git、cdをソースルートに複製し、以下を実行しました。
pyton3 -m pip install .
依存関係管理の問題:Pythonとpipの特別な場合:
- 今年はPython 2.7とPython 3の間の痛みを伴う移行でした...私たちは9に達し、11がまもなくリリースされる予定です。 pipは同じように頻繁に更新され、最新でない場合は常に警告します。
- 同時に、多くの開発者は過度に厳しい要件を持っています。 「私のソフトウェアにはこのパッケージの特定のバージョンが必要です。 '以降'、いいえ、このバージョンではありません。」または「これより最新ではありません。」一般的な回避策:仮想環境を使用してください。 2つの質問があります。
- 各パッケージに仮想環境を設定することは追跡と管理が困難であり、既存のデバイスにはドライブとRAMが制限されており、軽く使用できませんでした。
- 仮想環境に入れるパッケージと、仮想環境に入れないパッケージを決定すること自体が時間がかかる問題です。
- venvを使用しても、パッケージの依存関係ツリーに矛盾があると、無限ループに陥ることがあります。ここで、pipは他のパッケージのダウングレードが必要な限りパッケージのアップグレードをインストールし、pipは順番にアップグレードしたいと思います。最初と同じ
- たとえば、パッケージのRequirementA < 2.1.5およびRequirementB> 2.3がありますが、2.1.5より前のバージョンのAにはC < 4.1が必要で、B> 2.4のバージョンにはC> 5.2が必要です。 Cは> 5.2および< 4.1にすることはできません。できるちょっとしたコメディルーチンです。
正しい質問:
これまで効果があるような何かを思い出しましたが、これに対する返信を下記に投稿する予定ですが、うまくやっているのかよくわかりません。いくつかのbashスクリプト、パイプ、正規表現を使用して自動化するのは簡単です。しかし、この特定のアプローチを適用して体系化する前に、経験豊富なLinuxユーザーの意見を聞きたいです。あなたの裁量によると、どのようにしていますか?
a) GNU/Linux のユニークな利点を理想的に活用するとともに
b) 使用できる特定のディストリビューションに触れることなく
c) アルゴリズム的に健全かつ安全に行うことができます。 d) 無人アップグレードを合理的に自動化できます。これを確認しますか?途中でエラーが発生した場合は、再インポートを許可しますか?
- 特にソースからインストールする場合、PyPlから必要な依存関係を取得しなければならない場合が多いです。
ベストアンサー1
一時的な解決策:
多くの試行錯誤とピップをsudoとして使用して、ディストリビューションの1つを元に戻すことができないほど壊れた最後についに方法を見つけました。 pipオプションのヘルプガイドを参照して、このパスをたどることができ、問題が発生しないことがわかりました。しかし、:
アップグレード可能なすべてのパッケージを確認してください。
python3 -m pip list --outdated --verbose
すべての要件の競合を確認してください。
python3 -m pip check --verbose
パッケージが必須バージョンより古いかまったくインストールされていないため、要件が競合する場合もありますので、インストールしてください。依存性なし、その後、2に戻ります。要件と比較して新しいインストール済みパッケージが原因ですべての要件の競合が発生した場合は、手順4に進みます。
python3 -m pip install --no-dependencies --verbose <package-name>
手順1をもう一度確認し、アップグレード可能なパッケージをアップグレードしてください。依存関係なしその後、手順4に戻るまで、手順2〜3のサイクルを繰り返します。このより広いサイクルは、a)アップグレード可能なパッケージがない場合、b)インストールされたパッケージのすべての必須依存関係がインストールされており、十分に最近のバージョンであるか、または「新しい」状態になるまで繰り返されます。
今日はここまでです。次の作業に進みます。
a)これが問題を引き起こし、システムが破損する可能性があるか、b)この単純なアルゴリズムをループに安全に記述できるかどうか疑問に思います。
エラーを逆追跡する能力:
どの州で往復旅行が必要かはまだわかりませんが、そこにいることはわかっています。
そのため、上記で作成したすべてのコマンドは--verboseなので、収集できるすべての情報(必要以上の情報)が履歴に保存できるようにコンソールに表示されます。今まで頑張りました。
history >> ~/Documents/shell_histories/2021_mm_dd_pip_<upgrades,sourceinstalls,etc.>.txt
しかし、まだこのログをどのように処理するのかわかりません。
どんな提案がありますか?私のアプローチは正しいですか、それとも無謀ですか?とにかく、どうすればもっとうまくいくのでしょうか?