Import another file error

My folder / structrue file:

testpkg/test/__init__.py;
testpkg/test/test1.py
testpkg/test/test2.py
testpkg/setup.py

testpkg/test/__init__.pyfile is empty.
testpkg/test/test1.pyfile contents:

class Test1:
    def __init__(self, name):
        self.name = name

    def what_is_your_name(self):
        print(f'My name is {self.name}')

testpkg/test/test2.py file contents:

from .test1 import Test1


def main():
    t = Test1('me')
    t.what_is_your_name()

if __name__ == '__main__':
    main()

/testpkg/setup.py:

from setuptools import setup

setup(name='test',
      version='0.1',
      packages=['test'],
      entry_points={
          'console_scripts': [
              'test_exec = test.test2:main'
          ]
      }
      )

I cannot debug / run the test2.pyscript directly because it gives me an error:

ยป python test/test2.py
Traceback (most recent call last):
  File "test/test2.py", line 1, in <module>
    from .test1 import Test1
ModuleNotFoundError: No module named '__main__.test1'; '__main__' is not a package

But when I install it with pip install -U .

it works:

ยป pip install -U .
Processing /home/kossak/Kossak/files_common/PythonProjects/testpkg
Installing collected packages: test
  Found existing installation: test 0.1
    Uninstalling test-0.1:
      Successfully uninstalled test-0.1
  Running setup.py install for test ... done
Successfully installed test-0.1

ยป test_exec
My name is me

Question: How to write correctly test2.py, so that it works in both directions - directly (so that I can debug it in PyCharm or just run it with python test2.py) and after installing the package test? I tried changing the line:

from .test1 import Test1

to

from test1 import Test1

(remote point)

and I can run test2.pyfrom the command line, but after installation, my script "test_exec" gives me an error:

Traceback (most recent call last):
  File "/home/kossak/anaconda3/bin/test_exec", line 11, in <module>
    load_entry_point('test==0.1', 'console_scripts', 'test_exec')()
  File "/home/kossak/anaconda3/lib/python3.6/site-packages/setuptools-27.2.0-py3.6.egg/pkg_resources/__init__.py", line 565, in load_entry_point
  File "/home/kossak/anaconda3/lib/python3.6/site-packages/setuptools-27.2.0-py3.6.egg/pkg_resources/__init__.py", line 2598, in load_entry_point
  File "/home/kossak/anaconda3/lib/python3.6/site-packages/setuptools-27.2.0-py3.6.egg/pkg_resources/__init__.py", line 2258, in load
  File "/home/kossak/anaconda3/lib/python3.6/site-packages/setuptools-27.2.0-py3.6.egg/pkg_resources/__init__.py", line 2264, in resolve
  File "/home/kossak/anaconda3/lib/python3.6/site-packages/test/test2.py", line 1, in <module>
    from test1 import Test1
ModuleNotFoundError: No module named 'test1'
+4
2

: from test.test1 import Test1

+2

, . Python , . , ( , /). , python. : -

1)

python -m package.module

2) script

# cd package
python module.py

, , , , script , __name__, '__main__' script , , .

: - http://python-notes.curiousefficiency.org/en/latest/python_concepts/import_traps.html

0

Source: https://habr.com/ru/post/1672171/


All Articles