echo $ PATH mostra caminho para scripts python, mas eles não podem ser executados

3

Eu sou novo em usar o shell, e queria criar um diretório em $HOME onde eu possa colocar todos os meus scripts python, definir um caminho para esse diretório, para que eu possa ir para qualquer pasta no meu Mac e executar esses scripts em determinados arquivos, sem que o script tenha que estar contido no mesmo diretório que o arquivo que serviria como entrada para esses scripts.

Eu li e adicionei isso ao meu arquivo .zshrc :

export PATH="$HOME/python_functions/bin:$PATH"

Então eu adicionei um script chamado sleep_plotter.py to python_functions/bin , que é onde eu planejo colocar todos os meus scripts futuros também.

No entanto, quando navego até a pasta que contém o arquivo de texto que desejo usar como entrada para esse script e digito python sleep_plotter.py 113testCtM113.txt , o último argumento sendo a entrada de arquivo de texto para meu script, recebo a seguinte mensagem de erro :

python: can't open file 'sleep_plotter.py': [Errno 2] No such file or directory

Mas quando eu chamo o caminho usando echo $PATH , vejo isso:

/Users/myname/python_functions/bin: 

A partir disso, concluí que o python está procurando nesse diretório quando executo um comando Python, portanto, ele deve ser capaz de executar sleep_plotter.py mesmo quando eu estiver em uma pasta diferente que não contenha esse arquivo.

Estou usando o Mac OSX 10.11.2, zsh e o Anaconda 2.3.0.

    
por pat_krat 13.02.2016 / 13:09

2 respostas

5
A variável

PATH define os diretórios que são pesquisados ao executar comandos. No entanto, quando você executa python sleep_plotter.py 113testCtM113.txt , sleep_plotter.py é um argumento para o programa python (comando). O shell usa PATH para localizar python , mas não seus argumentos.

Você pode adicionar um atributo executável ao seu script:

$ chmod +x /Users/myname/python_functions/bin/sleep_plotter.py

Adicione uma sequência shebang ao topo (primeira linha) do seu script Python:

#!/usr/bin/env python

E execute o script diretamente como um comando:

$ sleep_plotter.py 113testCtM113.txt
    
por 13.02.2016 / 13:18
1

Se você quiser estender o python para pesquisar por diretórios adicionais, então você precisa fazer duas coisas: definir a variável PYTHONPATH e usar a opção -m no Python.

Em ~/.zshrc (observe que não há $PATH lá):

export PYTHONPATH="$HOME/python_functions/bin"

E no terminal use:

python -m sleep_plotter 113testCtM113.txt

que digitou tanto quanto antes, porque você tem que deixar de fora a extensão .py no arquivo python.

    
por 13.02.2016 / 14:20