Как сделать точку входа в скрипт в виртуальной среде доступной для всей системы? - PullRequest
0 голосов
/ 17 октября 2019

Я использую setuptools для упаковки Python, где я определяю точки входа консольного скрипта обычным способом в файле 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'
                                      ]},
     ...
)

После установки пакета я могу вызвать эту точку входа из командного файла следующим образом:

my_CURRENT_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>

Пока это работает,использование виртуальной среды заставляет меня включать всю информацию о пути перед вызовом точки входа, что, на мой взгляд, действительно разрушает простоту, которую точка входа должна предоставить потребителю сценария. Есть ли способ заставить setuptools зарегистрировать точку входа в масштабе всей системы, чтобы я мог вызывать точку входа без пути, подобного этому?:

my_DESIRED_batch_file.command

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

entry_point_name <my script args>

Без этого усложнения, вносимого виртуальными средами, точка входа консольного сценария позволяет потребителю сценария использовать сценарий без необходимости знать, где установлен сценарий или даже на каком языке он написан. Я хотел бы сохранитьэта простота даже при упаковке в виртуальных средах.

То, что я пробовал - я нашел фактический файл точки входа в виртуальной среде после установки пакета:

/anaconda3/envs/my_env/bin/my_entry_name

и поместил копию этого файла в путь основного лотка:

/anaconda3/bin/my_entry_name

и обнаружил, что я могу затем вызвать точку входа без пути,по желанию, однако это ручной шаг, который я не хочу делать потребителями скрипта. Есть ли способ получить setuptools, чтобы поместить файл точки входа в общий путь к корзине, а не к корзине среды или каким-либо другим автоматическим средствам для этого?

Моя настройка

  • ОС: macOS Catalina
  • Оболочка: bash (да, я изменил ее обратно после обновления Catalina и подавил раздражающее сообщение «zsh is now default»)
  • IDE:PyCharm 19.1 Pro
  • Анаконда: 4.4.7 (примечание: был перенесен из корня в User / my_user / обновлением Catalina)
  • Python: 3.7
  • Тип виртуального env: conda

1 Ответ

0 голосов
/ 18 октября 2019

Похоже, conda run может помочь.

Я не могу проверить это, но похоже, что это может позволить написать гораздо более простой сценарий оболочки. Примерно так:

#!/usr/bin/env sh

conda run -n ENV my_entry_name "$@"

Кажется, что это экспериментальная функция.

...