I want to run a Python script without explicitly having to call python every time in my shell.
I've tried to add the shebang #!/path/to/python, but this does not seem to work. Does anyone know a work around this?
Many thanks.
I want to run a Python script without explicitly having to call python every time in my shell.
I've tried to add the shebang #!/path/to/python, but this does not seem to work. Does anyone know a work around this?
Many thanks.
You've got to add the shebang:
#!/usr/bin/env python
Then make the script executable:
chmod +x foo
Then you can run it like any other executable:
./foo
And a note from Homer6: if you're editing the file from windows and invoking it on linux, you may run into the cryptic "No such file or directory" error. It's due to the line endings of the lines being CRLF instead of LF. If you convert them to LF, the script will execute as expected. Notepad++ > View > Show Symbols > Show End of Line to show the EOL characters. And Notepad++ > Edit > EOL Conversion > Unix Format to convert all line endings to use LF. Alternatively, you can use the dos2unix tool (dos2unix foo.py), which is present on most Linux systems.
/usr/bin/env than the path to Python in the shebang line: if you hard-code a path, the script will stop working if Python is ever moved… But so long as Python is on $PATH, /usr/bin/env will work.:set ff=unix then saving fixes this issue.It didn't really apply to your personal scripts but as you are quoting beets, note that it is also possible to automate this action when you are distributing your packages, thanks to setuptools entry_point option.
So if you are distributing a package like myModule and want to make the main_function() function accessible via typing mymodulescript in the console you would probably add something like this to your setup.py file :
setup(
# your other arguments ..
entry_points={
'console_scripts': [
'mymodulescript = myModule:main_function'
]
}
)
Add a line at the top of your script:
#! /usr/bin/env python
script_name.py to script_name chmod +x script_nameThe line at the top selects the same python that you get when typing python at the prompt. You can also specify a direct path:
#!/opt/python/3.6/bin/python
script_name (which should reflect the function it performs) less clear. There are primitive OS-es that need such extensions to determine which interpreter to start the Unix/Linux and their shells have long ago solved that in a better way. Leaving the extension makes you look inexperienced.ls.elf or emacs.bin so why should your own commands have an extension?Ensure you are able to run /path/to/python on your terminal. And make sure you have given execute permission for your python file. You can give permission for the file by
chmod +x mypythonfile.py