Search code examples
pythonterminalpathpython-3.8macos-mojave

Can't run Python script from Terminal without changing directories even though directory is included in PATH


OS: Mac 10.14.6

Python Version: 3.8.5

New to Python and Bash so apologies if this is a dumb question but I can't find an answer anywhere. The closest I found was this answer on this thread however, I've already executed chmod +x on that file to change the permissions to allow it to be executable and I followed the instructions again and I still couldn't get it to work.

Basically I want to run Python scripts from a specified folder on my desktop (file path ~/Desktop/Python\ Scripts) through Terminal without having to change directories (out of pure laziness).

I added the folder to PATH and can see that it is listed when I run echo $PATH in Terminal. I thought that would do the trick but when I try to run the program with the command python boxprintV2.py as I usually would when I change directories I get python: can't open file 'boxprintV2.py': [Errno 2] No such file or directory

This command works fine if I change the current directory as I have been doing and I can run my program no problem but I would like to run from a new terminal window without having to change directory every time. Permissions on the file have been changed using chmod +x

Shebang from my program is #!/usr/bin/env python3.


Solution

  • Ok, I've found a workaround by creating a shell script following this answer on a different thread.

    What I did was open a blank textedit file, go to format and convert it to plain text (or ⇧ + ⌘ + T which toggles rich text/plain text).

    From there I typed these commands into the document as follows:

    #! /bin/bash

    cd ~/Desktop/Python\ Scripts

    python boxprintV2.py

    When I saved I didn't specify a file extension and unticked the box that said "If no extension is provided, use .txt". I'm not sure if this was necessary but I'm just detailing my exact workflow for anyone else who may have the same (laziness) problem as I do.

    I then went back into a blank terminal window and entered:

    chmod +x ~/Desktop/Python\ Scripts/boxprintV2to allow the shell script to be executed by all users.

    From here I can just open the Python Scripts folder on my desktop, double click on the plain text file which is now a .exe and a new terminal window is opened with my Python script running!

    It's literally going to save me tens of seconds of my life. I'm sure I'll waste them anyway.