Как запустить сценарий Python портативно, не указывая его полный путь

Есть ли переносимый способ запуска скрипта python из оболочки без написания полного пути?

Например, в Linux я бы хотел, чтобы в моем домашнем каталоге

cd ~ 

чтобы иметь возможность запускать скрипт python под названием run.py, который находится в файле ~ / long / path / to / run.py, но я хочу запустить его, просто набрав

 python run.py 

вместо

 python ~/long/path/to/run.py 

Я хотел бы надеяться на какой-то список путей поиска, который содержит несколько каталогов, подобно переменной PATH, так что python run.py запускает первый run.py, который встречается в одном из каталогов.

Я рассмотрел возможность запуска run.py в исполняемый файл и добавление его каталога в системную переменную PATH, но не смог найти переносимый способ создания исполняемого скрипта python.

РЕДАКТИРОВАТЬ

Через год после того, как я спрошу об этом, я немного меньше noob, и я вижу, что мой вопрос был не очень ясен и не имел большого смысла, поэтому после поднятия вопроса я проясню некоторые вещи.

1) Портативный.

Когда я спросил об этом, я сказал портативный. Однако какие переносные средства в этом случае не ясны, и я не уделял этому много внимания.

  • платформы: должны работать на POSIX (Linux, MacOS и т. д.) и Windows

  • это все еще не имеет большого смысла, поскольку в Windows используется cmd.exe , а POSIX использует sh , поэтому каждый может запускать команды с другим синтаксисом. Итак, допустим, что наиболее переносимой возможностью было бы подавать один и тот же вход для sh и cmd.exe , запуская скрипт python в обоих случаях. В этом случае вы можете запустить ту же команду из system функции ANSI C, которая использует sh для POSIX и cmd для Windows. ANSI C является одной из немногих вещей, которая характерна для Windows и POSIX. В этом случае вопрос имеет смысл.

2) Исполняемый

Затем фраза, turning run.py into an executable , не очень ясна. В связи с этим я говорил о стратегии Linux chmod +x run.py , добавлял shebang #!/usr/bin/env python и добавлял свой каталог в систему, добавляя переменную окружения PATH ~ / long / path / to /. Но тогда это не будет работать для окон, потому что окна не поддерживают свойство метаданных исполняемого файла, такое как Linux, и потому что / usr / bin / env не обязательно существует в Windows.

3) Расширение

Наконец, в моей голове я надеялся на решение, которое не определяет, какой тип файла работает, так что если когда-нибудь мы примем решение, скажем, файл perl, интерфейсы не изменились бы.

Поэтому писать run.py было бы плохо, потому что он run.py бы run.py ; было бы лучше иметь возможность писать только run

4 Solutions collect form web for “Как запустить сценарий Python портативно, не указывая его полный путь”

Если каталог, содержащий run.py находится на пути поиска модуля (например, переменная среды PYTHONPATH ), вы должны иметь возможность запускать его следующим образом:

 python -m run 

Вот документация по опции командной строки -m :

-m module-name
Ищет sys.path для именованного модуля и запускает соответствующий .py файл как скрипт.

Вы можете сделать исполняемый файл скрипта python, добавив

 #!/usr/bin/env python 

к началу файла и сделать его исполняемым с помощью chmod +x .

Ответ после пояснения

Я предпочитаю следующий подход к предложенному @FJ, потому что он не требует, чтобы пользователи указывали тип файла. Обратите внимание, что это не было указано в исходном вопросе, поэтому его ответ на исходный вопрос был правильным.

Позволяет вызвать файл pytest.py чтобы избежать конфликтов с возможной существующей программой run .

На POSIX (MacOs, linux) делают то, что сказал @Petr, который основан на том, что сказал @alberge:

  • chmod +x
  • добавить shebang #!/usr/bin/env python
  • создайте каталог и добавьте его в путь. Обычными локалями в Linux являются: ~ / bin / для одного пользователя, /usr/local/bin/ для всех пользователей
  • symlink ( cp -s ) файл под вашим PATH с basename pytest вместо pytest.py

На окнах:

  • создайте каталог и добавьте его в PATH. AFAIK, для этого нет обычного места, так почему бы не C:\bin\ и ~\bin\ ?
  • добавьте .PY в переменную окружения PATHEXT чтобы Windows распознавала файлы с расширением python как исполняемые файлы, не требуя ввода имени
  • связать файлы python с интерпретатором python.exe (проводник Windows) щелкните правой кнопкой мыши> установите флажок «Всегда использовать выбранную программу»). В установщике python есть опция, которая делает это за вас.
  • pytest с расширением в pytest в PATH (с использованием расширения pytest оболочки из проводника Windows или mklink name dest из cmd)

Теперь system( "pytest" ); должен работать в обеих системах ( sh под Linux, cmd под Windows)

  1. Сделать исполняемый файл python (как указано выше в «alberge»)
  2. Создайте каталог и поместите этот каталог в свою переменную PATH
  3. В этом каталоге создайте ссылки на свои скрипты python
  • Самый быстрый способ сделать снимок экрана с помощью python на окнах
  • Python - получить значения датчиков и скорости вращения вентиляторов - Windows 10
  • Копирование и объединение каталогов, исключая определенные расширения
  • Окно терминала Python появляется при запуске приложения pygame
  • Не удается дважды запустить KeyboardInterrupt в командной строке?
  • Список запущенных процессов в 64-битной Windows
  • Редактирование реестра Windows, с Python, под Linux
  • python manage.py runningerver, shell, dbshell зависает на git-bash
  •  
    Interesting Posts for Van-Lav

    для цикла, чтобы перечислить понимание или карту в python

    Как проверить значение null для UserProperty в Google App Engine

    Как избежать экранирования html-символов в веб-фреймворке python для бутылок?

    Есть ли какая-то тщательная обширная документация Twisted, которая лучше официального сайта?

    Уведомлять задачу сельдерея о закрытии рабочего

    Как сделать Python split () на языках (например, китайском), которые не используют пробелы в качестве разделителя слов?

    Скрининг Ajax на основе обзорной страницы с помощью Scrapy

    Эффективно и экономично запускать несколько экземпляров программы python?

    проверить действительные аргументы

    Работает ли PyPy с NLTK?

    Как применять нарезку на пандах Серия строк

    Как переопределить параметр join_multivalued CsvItemExporter

    Что такое .pydistutils.cfg?

    Как пройти через отладочную ошибку?

    Загрузка объектов хранилища данных из проекта Python в Go приводит к вложенным structs slices of slices error

    Python - лучший язык программирования в мире.