This should be the easiest problem on earth, but even after extensive searching and tinkering, I\'m still in deep trouble with finding a \"correct\" way to lay a directory s
I have arranged an example that works here.
I think naming both package and module apple
confusing, perhaps that was one source of confusion. The only non-obvious part IMO is that you must set PYTHONPATH
to the current directory if you're not using a proper setup.py
distutils package to install your apple
package.
__init__.py
in the apple directory... correct? Empty or what should be inside?Yes, correct. Most frequently empty. If you put foo = 42
in it you can later do from apple import foo
while you'll need to do from apple.apple import foo
if you put it in apple.py
. While it might seem convenient you should use it sparingly.
py.test should be able to find your tests regardless, but see below..
__init__.py
in their test directory, but that's explicitly said to be wrong in the py.test documentation. So why god whySo you can import a file in tests that provide common test functionality. In py.test that might be better achieved by creating fixtures in a file called tests/conftest.py
.
from apple import apple
apple.eat()
That seems very fragile. I would suggest either
(a) set the environment variable PYTHONPATH to point to the folder where README.md
is, or better
(b) create a setup.py file (at the same level as your README.md
file), here's a minimal one:
from setuptools import setup
setup(name='apple', packages=['apple'])
Run the file like so:
python setup.py develop
now apple
is globally available and you should never see a no module named apple
problem again, i.e. you can run py.test from the root folder or the tests folder.
You can read more about setup.py
in the Python Packaging User Guide at https://python-packaging-user-guide.readthedocs.org/en/latest/index.html