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

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

Sou novo no uso do shell e queria criar um diretório onde $HOMEpudesse colocar todos os meus scripts python, definir um caminho para esse diretório, para que eu pudesse entrar em qualquer pasta do meu Mac e executar esses scripts em determinados arquivos, sem que o script precise estar contido no mesmo diretório do arquivo que serviria de entrada para esses scripts.

Eu li e adicionei isto ao meu .zshrcarquivo:

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

Em seguida, adicionei um script chamado sleep_plotter.pyto python_functions/bin, onde pretendo 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, sendo o último argumento a entrada do 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 chamo o caminho usando echo $PATH, vejo isto:

/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 poder ser executado sleep_plotter.pymesmo quando estou em uma pasta diferente que não contém esse arquivo.

Estou usando Mac OSX 10.11.2, zsh e Anaconda 2.3.0.

Responder1

PATHvariável define os diretórios que são pesquisados ​​​​ao executar comandos. Porém quando você executa python sleep_plotter.py 113testCtM113.txt, sleep_plotter.pyé um argumento para o pythonprograma (comando). Shell usa PATHpara find 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 umShebangsequência no topo (primeira linha) do seu script Python:

#!/usr/bin/env python

E execute o script diretamente como um comando:

$ sleep_plotter.py 113testCtM113.txt

Responder2

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

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

export PYTHONPATH="$HOME/python_functions/bin"

E no terminal use:

python -m sleep_plotter 113testCtM113.txt

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

informação relacionada