Как я могу выполнить скрипт python напрямую (без префикса командой python) из bash? - PullRequest
3 голосов
/ 17 мая 2011

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

manage.py runserver

Однако, когда я делаю это, он говорит:

bash: manage.py: command not found

Я понимаюработать, когда я делаю: python manage.py runserver, однако я хотел бы понять, почему это работает, а другой метод - нет.Я предполагаю, что это очень простые вещи, но я подумал спросить здесь.

Ответы [ 4 ]

11 голосов
/ 17 мая 2011

Это потому, что ваш manage.py не является исполняемым скриптом.

Сначала поставьте эту строку в начале manage.py (при условии, что ваш питон находится в /usr/bin/python):

#!/usr/bin/python

Затем сделайте ваш скрипт исполняемым:

chmod +x manage.py

Затем попробуйте выполнить ваш скрипт ./manage.py runserver.

Прочтите эту ссылку для получения дополнительной информации: http://effbot.org/pyfaq/how-do-i-make-a-python-script-executable-on-unix.htm

4 голосов
/ 17 мая 2011

bash(1) будет искать переменную окружения PATH, чтобы найти программы для выполнения. PATH обычно не содержит ваш «текущий рабочий каталог» (.), потому что это открывает людям тривиальные проблемы безопасности:

cd /home/unsavory_character/
ls

Если unsavory_character поместит исполняемый файл в /home/unsavory_character/ls, который добавляет его или ее ключ ssh(1) в ваш файл ~/.ssh/authorized_keys, вас ждет сюрприз - он или она может войти в систему как вы без пароль.

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

Обходной путь:

./manage.py runserver

Конечно, это предполагает, что ваш текущий рабочий каталог является каталогом, содержащим скрипт manage.py. Это может быть безопасным предположением. Если вы хотите иметь возможность выполнить его из любой точки файловой системы, вы можете добавить каталог в PATH, отредактировав файл ~/.profile или ~/.bash_profile или ~/.bashrc. (Если один из них уже существует, выберите его. Кажется, я вспоминаю, что другие с PATH проблемами в OS X обнаружили, что один или другой файл работал хорошо, а другой так и не был выполнен.)

(В моем случае у меня есть куча самописных утилит в ~/bin/, но ваши могут быть в другом месте. Измените пути в зависимости от ситуации.)

if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi
0 голосов
/ 17 мая 2011

Я подготовил небольшой «скрипт» для автоматизации этого: (просто скопируйте весь текст и вставьте его в свой активный терминал). tee -a ~/.profile <<EOF if [ -d "/Library/Python/2.6/site-packages/django/bin" ] ; then PATH=/Library/Python/2.6/site-packages/django/bin:$PATH fi EOF Разве django-admin.py не делает то же самое? Я так думаю, потому что я могу найти manage.py внутри моей папки ../bin. И заявлено в официальной документации, они делают то же самое. Поэтому я верю;)

Кроме того, вы получили Django через easy_install? Мой сценарий предполагает, что вы используете Snow Leopard с системной версией (Python 2.6).

0 голосов
/ 17 мая 2011

manage.py должен быть исполняемым. Попробуйте: chmod +x manage.py

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...