Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

VCS and Python project structure: How to setup the PYTHONPATH automatically?

There are many suggestions on the web what the structure of the Python project can/shall be, e.g. What is the best project structure for a Python application?.

"proj-dir"
+- doc
+- apidoc
+- scripts
+- "src-dir"
+- tests

It seems that many people in the Python world prefer the "src-dir" and "proj-dir" to be equal (or very similar). However, the scripts and tests will surely have to import some modules from src-dir, so either I have to

  • run all scripts and tests when proj-dir as my current working dir, or
  • the PYTHONPATH must contain the proj-dir, right?

Or, is there any other possibility which I overlook now?

Suppose I have such structure and have set up the PYTHONPATH correctly. Now I commit the project into VCS and another developer checks the project out. On his machine the PYTHONPATH will not be set properly and the imports in scripts and in tests will not work.

  1. Is there any possibility to somehow make the PYTHONPATH definition part of the project, so that it can be part of the version control?
  2. Is there a different project structure that would allow me to make checkout and start using the project without modifying the PYTHONPATH?
  3. Is to solution suggested here: Python - How to PYTHONPATH with a complex directory structure? (i.e. to include a short sys.path modifying snippet in every script and test) the right one?
  4. Would a site module http://docs.python.org/2/library/site.html be of any help?
  5. What is your workflow when developing a project with a similar structure?
like image 857
Posa Avatar asked Nov 12 '22 19:11

Posa


1 Answers

Even through project structure is complex and testcases uses src in different package, you can add PYTHONPATH in Environmental Variables in Windows

My Computer --> Properties --> System Properties --> Advanced Tab --> Environmental Variables. Add new System Variable PYTHONPATH and append your projects dir to that variable with delimiter ';'

I suggest you to keep readme.txt to your project which clearly says to how to add PYTHONPATH in order to run the scripts. It is as similar as adding PATH of android-sdk to make adb shell to work, adding Java path to make Java to work in command prompt

Thus readme.txt helps to run the script when downloaded in different machine with only one change(adding PYTHONPATH variable with value = projectpath)

No need to add all modules of src in order to make testcases to work which is using src

Here is an example proj structure:

SAMPLEPROJECT
    src
      com
        sample
          example
            utils
              a.py
              b.py

    testcases
      test1.py
      test2.py

    res
    docs

If test1.py test case is using a.py and and b.py: Dont add utils module to PYTHONPATH, as you already added project path to python path your import statement looks something like this in test1.py

from src.com.sample.example.utils import a.py
from src.com.sample.example.utils import b.py 
like image 65
Venkatesh Avatar answered Nov 15 '22 13:11

Venkatesh