1) Ensure you have a blank __init__.py
file in subdir
.
2) Use a full path; something like this:
import os
import sys
sys.path.append(os.path.join(os.path.dirname(__file__), 'subdir'))
Edit: providing more info to answer questions asked in a comment.
As Nick Johnson demonstrates you can place those three lines of code in a file called fix_path.py
. Then, in your main.py
file, do this import fix_path
before all other imports. Link to a tested application using this technique.
And, yes, the __init__.py
file is required; per the documentation:
When importing the package, Python
searches through the directories on
sys.path looking for the package
subdirectory.
The __init__.py
files are required to
make Python treat the directories as
containing packages; this is done to
prevent directories with a common
name, such as string, from
unintentionally hiding valid modules
that occur later on the module search
path. In the simplest case,
__init__.py
can just be an empty file, but it can also execute initialization
code for the package or set the
__all__
variable, described later.