Вопрос по python, windows, shell, posix – Как запустить скрипт на 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.

**EDIT**

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

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

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

* the platforms: should work on POSIX (Linux, MacOS, etc.) and Windows
* this still does not make much sense since windows uses `cmd.exe`, and POSIX uses `sh`, so each one could run the commands with a different syntax. So let's say that the most portable thing possible would be to feed the same input to both `sh` and `cmd.exe`, running the python script in both cases. In this case, you could run the same command from an ANSI C `system` function, which uses `sh` on POSIX and `cmd` on Windows. ANSI C being one of the few things that is common to Windows and POSIX, the question makes some sense in that case.

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

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

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

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

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

1. Make python file executable (as "alberge" stated above)
2. Create some directory and put this directory into your PATH variable
3. In this directory, create links to your python scripts



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

```
python -m run

```

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

**-m** `module-name`  

 Searches `sys.path` for the named module and runs the corresponding `.py` file as a script.



**Answer after the clarification edit**

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

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

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

`chmod +x` 
add shebang `#!/usr/bin/env python`
create a directory and add it to path. Usual locations on Linux are: ~/bin/ for a single user, `/usr/local/bin/` for all users
symlink (`cp -s`) the file under your PATH with basename `pytest` instead of `pytest.py`
На окнах:

create a dir and add it to PATH. AFAIK, there is no conventional place for that, so why not `C:\bin\` and `~\bin\`?
add `.PY` to the `PATHEXT` environment variable so that Windows will recognize files with python extension as runnable files without requiring you to type the extension
associate python files with the `python.exe` interpreter (Windows Explorer > right click > check "Always use the selected program"). There is an option on the python installer that does this for you.
symlink `pytest` with extension into the dir under `PATH` (using Link Shell Extension from Windows Explorer or `mklink name dest` from cmd )

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



```
#!/usr/bin/env python

```

в начало файла, и сделать его исполняемым с`chmod +x`.