Setting Pythonpath programmatic
Barry Scott
barry at barrys-emacs.org
Mon Dec 16 13:57:57 EST 2019
> On 14 Dec 2019, at 16:00, Prasad Rajassekaran <prasadautomationtesting at gmail.com> wrote:
>
> 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')
That's your top folder.
> 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')
But what are these? Do you have modules so can access from the top folder?
>
> from Pratice.Directory1.File1 import File1 as f
Only works if you have created modules on the disk.
Do you have __init__.py in Pratice, Practice/Directot1 etc?
Barry
>
>
> 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.
> --
> https://mail.python.org/mailman/listinfo/python-list
>
More information about the Python-list
mailing list