インストールされたパッケージがconda仮想環境を使用している場合、Pythonコンソールスクリプトのエントリポイントをどのように機能させますか?

コーナス

問題-非仮想環境からconda仮想環境に移行すると、コンソールスクリプトのエントリポイントが認識されなくなります。

背景-私は最近、Pythonプロジェクトに仮想環境を使用することについて宗教を得ようとしました。macOS Catalinaにアップデートすると、すべてのPyCharmプロジェクトで無効なインタープリターエラーが表示された後、これを行うことにしました。「大きな混乱を別の混乱の上に投げると、何がうまくいかないのだろうか」と私は思いました。2日後、ようやくスクリプトを再度実行できるようになりました。これは、これまでで最悪のレンガの壁です。どこにも解決策が見つからなかったので、最初のSOの質問とそれに続く解決策を書いています。これは、私が長い間使用してきたこのサイトに貢献する価値のあるものがついにあるのではないかと考えています。

私のセットアップ

  • OS:macOSカタリナ
  • シェル:bash(はい、Catalinaの更新後に元に戻し、「zshはデフォルトになりました」というしつこいメッセージを抑制しました)
  • IDE:PyCharm 19.1 Pro
  • アナコンダ:4.4.7
  • Python:3.7

コンテキスト-私はいくつかの相互作用するデータサイエンスパッケージを開発し、一般的な方法としてこれらを編集可能なモードでローカルにインストールします。

My_Machine:my_package my_user_name$ pip install -e .

私はsetuptoolsでsetup.pyファイルを使用してPythonパッケージを作成し、PyCharmを使用してビルドします。setup.pyファイル内で、コンソールスクリプトのエントリポイントを次のように定義します。

setup.py

# -*- coding: utf-8 -*-

from setuptools import setup, find_packages

setup(...
      name='my_project',
      entry_points={'console_scripts':['my_entry_name=my_package.scripts.my_python_script:main'
                                      ]},
     ...
)

conda仮想環境に移行する前は、次のようなバッチファイルを介してスクリプトを何年も問題なく実行していました。

my_batch_file.command:

#!/bin/bash
cd "$(dirname "$0")"  # set the working directory as the command file locations

my_entry_name <script arguments>

ただし、conda仮想環境に移行した後、コマンドファイルを実行するとmy_entry_name: command not foundエラーが発生します。

これまでに試したこと

  • which pythonターミナルコマンドを使用して、使用するPythonを確認し、設定しようとしましたデフォルトがであることがわかり/Users/my_user_name/anaconda3/bin/pythonます。プロジェクト内のコマンドプロンプトからこれを実行すると/Users/my_user_name/anaconda3/envs/my_env/bin/python、期待どおりに環境バージョンを反映していることがわかります。
  • 実際のエントリポイントファイルをチェックインして/Users/my_user_name/anaconda3/envs/my_env/bin/my_entry_name、シバン行がPythonバージョンをどのように示しているかを確認しました。#!/Users/my_user_name/anaconda3/envs/my_env/bin/python
  • このシバンを私の.commandファイルの先頭に追加しようとしました
  • エントリポイントが正しく登録されていない可能性があると考えて、パッケージを何度も再インストールしました。
  • Catalinaアップデートによるzshへの移行、およびbashへの復帰が問題を引き起こした可能性があると考えて、bashとzshを何度も混乱させました。
  • 仮想環境から戻って機能に戻ろうとしましたが、PyCharm非仮想インタープリター設定を再び機能させることができませんでした。
  • $ PATHの内容で問題がないか調べました。
  • 仮想環境に関するチュートリアルをたくさん読んでください(私が見つけたものはすべて非常に基本的なものにとどまります)
  • 仮想環境に関連するsetuptoolsのバグに関するスレッドを追求しました
  • これらの努力の多くの組み合わせ。

これはどれも機能しませんでした-同じmy_entry_name: command not foundエラー。非常にイライラする2日間。

コーナス

さらに入力して実験した後、回答を修正しました。エントリポイントを定義する実際のファイルがどこにあるかを知る必要がある2つのオプションを見つけました。conda仮想環境の場合、次のようになります。

/anaconda3/envs/my_env_name/bin/entry_point_name

このファイルが呼び出された場合、Pythonのバージョンを指定したり、環境をアクティブ化したりする必要はありません。私はこれを行う2つの方法を見つけました:

オプション1-エントリポイントが正しく呼び出された場合、仮想環境を最初に指摘した@sinorocのクレジットをアクティブ化する必要はありません。conda仮想環境の場合、次のようになります。

my_batch_file.command

#!/bin/bash
cd "$(dirname "$0")"  # set the working directory as the command file locations

~/anaconda3/envs/my_env_name/bin/entry_point_name <my script args>

他のタイプの仮想環境の場合は、パスの詳細を調整してエントリポイントファイルにアクセスするだけです。

オプション2-エントリポイントファイルのコピーをメインのAnacondaビンに配置する場合:

/anaconda3/bin/my_entry_name

パスを指定する必要はなく、動作するようにエントリポイントを呼び出すことができます。つまり、スクリプトユーザーを言語から保護し、詳細をインストールします。

my_batch_file.command

#!/bin/bash
cd "$(dirname "$0")"  # set the working directory as the command file locations

entry_point_name <my script args>

この手動コピーの手順は洗練されていないため、これをより適切に行う方法について質問を投稿しました。システム全体で利用可能な仮想環境でスクリプトへのエントリポイントを作成するにはどうすればよいですか。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ