How can I run a python script with my own command line name like 'myscript' without having to do 'python myscript.py' in the terminal?
-
2What OS do you want do this on? – Ismail Badawi Dec 15 '14 at 23:05
-
Mac OS X 10.10 Yosemite – ctrlz Dec 15 '14 at 23:07
-
@IsmailBadawi Op post mentioned Terminal, so it maybe Linux – Hackaholic Dec 15 '14 at 23:07
-
See also: [python - setup.py and adding file to /bin/ - Stack Overflow](https://stackoverflow.com/questions/4840182/setup-py-and-adding-file-to-bin/35896132#35896132) for detailed instruction on the setuptools `console_scripts` method. – user202729 Dec 06 '21 at 06:31
6 Answers
Add a shebang line to the top of the script:
#!/usr/bin/env pythonMark the script as executable:
chmod +x myscript.pyAdd the dir containing it to your
PATHvariable. (If you want it to stick, you'll have to do this in.bashrcor.bash_profilein your home dir.)export PATH=/path/to/script:$PATH
- 44,771
- 11
- 88
- 112
-
still cant run by my name 'square': -bash: /usr/bin/square: No such file or directory – ctrlz Dec 15 '14 at 23:23
-
-
2@bingo14 What is the output of `echo $PATH`? And the absolute path to your script? – Ismail Badawi Dec 15 '14 at 23:29
-
It is: /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/usr/local/git/bin:/Development/adt-bundle/sdk/platform-tools:/Development/adt-bundle/sdk/tools – ctrlz Dec 16 '14 at 20:51
-
-
2So that needs to be added to your path, like I showed in point 3 in my answer. – tzaman Dec 16 '14 at 22:12
-
Doesn't work for scripts that have dependencies our other scripts + resources they require. – Destaq Jul 09 '20 at 10:09
The best way, which is cross-platform, is to create setup.py, define an entry point in it and install with pip.
Say you have the following contents of myscript.py:
def run():
print('Hello world')
Then you add setup.py with the following:
from setuptools import setup
setup(
name='myscript',
version='0.0.1',
entry_points={
'console_scripts': [
'myscript=myscript:run'
]
}
)
Entry point format is terminal_command_name=python_script_name:main_method_name
Finally install with the following command.
pip install -e /path/to/script/folder
-e stands for editable, meaning you'll be able to work on the script and invoke the latest version without need to reinstall
After that you can run myscript from any directory.
- 901
- 6
- 5
-
Is it possible to call entry points like `myscript update` or only `myscript_update` – Nikita Prokaiev Aug 14 '21 at 20:04
-
1@NikitaProkaiev In `myscript update`, `update` is a command line argument to the script -- the same as if you ran `python myscript.py update`. It would have no effect unless you wrote code in your script to handle command line arguments. You could define another entry in `console_scripts` like `myscript_update=myscript:update` to call, in this case, a function called `update`. – cosmicFluke Sep 13 '21 at 20:19
I usually do in the script:
#!/usr/bin/python
... code ...
And in terminal:
$: chmod 755 yourfile.py
$: ./yourfile.py
- 4,587
- 11
- 40
- 56
- 397
- 1
- 4
- 10
Another related solution which some people may be interested in. One can also directly embed the contents of myscript.py into your .bashrc file on Linux (should also work for MacOS I think)
For example, I have the following function defined in my .bashrc for dumping Python pickles to the terminal, note that the ${1} is the first argument following the function name:
depickle() {
python << EOPYTHON
import pickle
f = open('${1}', 'rb')
while True:
try:
print(pickle.load(f))
except EOFError:
break
EOPYTHON
}
With this in place (and after reloading .bashrc), I can now run depickle a.pickle from any terminal or directory on my computer.
- 1,367
- 9
- 21
The simplest way that comes to my mind is to use "pyinstaller".
- create an environment that contains all the lib you have used in your code.
- activate the environment and in the command window write
pip install pyinstaller - Use the command window to open the main directory that codes maincode.py is located.
- remember to keep the environment active and write
pyinstaller maincode.py - Check the folder named "build" and you will find the executable file.
I hope that this solution helps you. GL
- 41
- 3
I've struggled for a few days with the problem of not finding the command py -3 or any other related to pylauncher command if script was running by service created using Nssm tool.
But same commands worked when run directly from cmd.
What was the solution? Just to re-run Python installer and at the very end click the option to disable path length limit.
I'll just leave it here, so that anyone can use this answer and find it helpful.
- 309
- 4
- 18