Setting Pythonpath programmatic

Prasad Rajassekaran prasadautomationtesting at gmail.com
Sat Dec 14 11:00:31 EST 2019


0


Aim:-

I would want to set python path programmatic in my project. So that, all other directories files can be imported without any issues.

Problem statement:-

I used to add all the folders & sub-folders in environment variables under PYTHONPATH but this has two constrains.

1, Any new folders created need to be added in environment variables all the times. After certain limit, environment variables will not be accepted new path reference due to characters limitaion.

- Error: This environment variable is too large. This dialog allows setting values up to 2047 characters long.

2, Secondly, all the team members in my team need to perform the same activity manually all the times.

Tried self solution:-

Created a sample folder and added the below code before main import files and ran from command prompt which worked perfectly fine.

**FilePath: foo/Python/Learning&Development/Pratice/Directory1/File1.py**

class File1():

    def parent(self):
        return "I am from File1"

**FilePath: foo/Python/Learning&Development/Pratice/Directory2/File2.py**

    import sys
try:
    sys.path.index('foo/Python/Learning&Development')
    sys.path.index('foo/Python/Learning&Development/Pratice')
    sys.path.index('foo/Python/Learning&Development/Pratice/Directory1')
    sys.path.index('foo/Python/Learning&Development/Pratice/Directory2')
except ValueError:
    sys.path.append('foo/Python/Learning&Development')
    sys.path.append('foo/Python/Learning&Development/Pratice')
    sys.path.append('foo/Python/Learning&Development/Pratice/Directory1')
    sys.path.append('foo/Python/Learning&Development/Pratice/Directory2')

from Pratice.Directory1.File1 import File1 as f


class File2():

    def child(self):
        return f.parent(self)
Results:

I am from File1

Now I wish to convert the sys.path as a single method and call automatically before running any .py file in the project folder.

So, on trail basis, I created 'init.py' file added the same piece (sys.path) of code, commented the same code in File2.py and run it but ended up with file import error.

**FilePath: foo/Python/Learning&Development/Pratice/Directory2/__init__.py**

import sys
try:
    sys.path.index('foo/Automation/Python/Learning&Development')
    sys.path.index('foo/Automation/Python/Learning&Development/Pratice')
    sys.path.index('foo/Automation/Python/Learning&Development/Pratice/Directory1')
    sys.path.index('foo/Automation/Python/Learning&Development/Pratice/Directory2')
except ValueError:
    sys.path.append('foo/Automation/Python/Learning&Development')
    sys.path.append('foo/Automation/Python/Learning&Development/Pratice')
sys.path.append('foo/Automation/Python/Learning&Development/Pratice/Directory1') sys.path.append('foo/Automation/Python/Learning&Development/Pratice/Directory2')

**FilePath: foo/Python/Learning&Development/Pratice/Directory1/File1.py**

class File1():

    def parent(self):
        return "I am from File1"

**FilePath: foo/Python/Learning&Development/Pratice/Directory2/File2.py**

# import sys
# try:
    # sys.path.index('foo/Python/Learning&Development')
    # sys.path.index('foo/Python/Learning&Development/Pratice')
    # sys.path.index('foo/Python/Learning&Development/Pratice/Directory1')
    # sys.path.index('foo/Python/Learning&Development/Pratice/Directory2')
# except ValueError:
    # sys.path.append('foo/Python/Learning&Development')
    # sys.path.append('foo/Python/Learning&Development/Pratice')
    # sys.path.append('foo/Python/Learning&Development/Pratice/Directory1')
    # sys.path.append('foo/Python/Learning&Development/Pratice/Directory2')

from Pratice.Directory1.File1 import File1 as f


class File2():

    def child(self):
        return f.parent(self)
Results:

Traceback (most recent call last):
  File "File2.py", line 13, in <module>
    from Pratice.Directory1.File1 import File1 as f
ModuleNotFoundError: No module named 'Pratice

Could someone help me on this problem? I would want the same piece of code to be executed before running any of the .py file in my project folder. So that, import error would not come into picture.

Expected: Python path should be set automatically by default and import error should not occur while running any python file in the project.


More information about the Python-list mailing list