# Unable to launch tests with python 3.12

**URL:** https://discuss.tryton.org/t/unable-to-launch-tests-with-python-3-12/7322
**Category:** Developer
**Created:** [May 27, 2024, 8:57am UTC](https://discuss.tryton.org/t/unable-to-launch-tests-with-python-3-12/7322 "2024-05-27T08:57:31Z")
**Posts on this page:** 11
**Page:** 1

<div class="post-metadata">

### Author: ![maxx](https://discuss-cdn.tryton.org/user_avatar/discuss.tryton.org/maxx/32/2320_2.png) [@maxx](https://discuss.tryton.org/u/maxx)
#### Post date: [May 27, 2024, 8:57am UTC](https://discuss.tryton.org/t/unable-to-launch-tests-with-python-3-12/7322/1 "2024-05-27T08:57:31Z")

</div>

Hi,

I just switch to python 3.12 and I can’t launch tests on tryton\_dev.

Here’s my procedure:

- Cloning tryton\_dev: `hg clone ssh://hg@foss.heptapod.net/tryton/tryton tryton_dev `
- Creating virtualenv: `virtualenv .venv/trytond`
- Switching to virtualenv: `source .venv/trytond/bin/activate`
- Getting requirements: `.hooks/update_requirements`
- Installing requirements: `pip install -r requirements.txt -r requirements-dev.txt -e trytond/ -e proteus/ `
- Trying to launch tests on specific module: `python -m unittest discover -s trytond.modules.stock.tests `

I’m getting this error:

```auto
Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "/usr/lib/python3.12/unittest/ __main__.py", line 18, in <module>
    main(module=None)
  File "/usr/lib/python3.12/unittest/main.py", line 104, in __init__
    self.parseArgs(argv)
  File "/usr/lib/python3.12/unittest/main.py", line 130, in parseArgs
    self._do_discovery(argv[2:])
  File "/usr/lib/python3.12/unittest/main.py", line 253, in _do_discovery
    self.createTests(from_discovery=True, Loader=Loader)
  File "/usr/lib/python3.12/unittest/main.py", line 160, in createTests
    self.test = loader.discover(self.start, self.pattern, self.top)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/loader.py", line 307, in discover
    raise ImportError('Start directory is not importable: %r' % start_dir)
ImportError: Start directory is not importable: 'trytond.trytond.modules.stock.tests'

```

Thanks for help ! 🙂

---

<div class="post-metadata">

### Author: ![ced](https://discuss-cdn.tryton.org/user_avatar/discuss.tryton.org/ced/32/1237_2.png) [@ced](https://discuss.tryton.org/u/ced)
#### Post date: [May 27, 2024, 9:14am UTC](https://discuss.tryton.org/t/unable-to-launch-tests-with-python-3-12/7322/2 "2024-05-27T09:14:41Z")

</div>

> [@maxx](#):
>
> trytond.trytond.modules.stock.tests

This is not a valid module path. The first `trytond` directory is not a module.

---

<div class="post-metadata">

### Author: ![maxx](https://discuss-cdn.tryton.org/user_avatar/discuss.tryton.org/maxx/32/2320_2.png) [@maxx](https://discuss.tryton.org/u/maxx)
#### Post date: [May 27, 2024, 9:17am UTC](https://discuss.tryton.org/t/unable-to-launch-tests-with-python-3-12/7322/3 "2024-05-27T09:17:04Z")

</div>

> [@ced](#):
>
> This is not a valid module path. The first `trytond` directory is not a module.

I made a mistake when copying ☹, it was:

```auto
python -m unittest discover -s trytond.modules.stock.tests

```

and getting the error

---

<div class="post-metadata">

### Author: ![ced](https://discuss-cdn.tryton.org/user_avatar/discuss.tryton.org/ced/32/1237_2.png) [@ced](https://discuss.tryton.org/u/ced)
#### Post date: [May 27, 2024, 9:18am UTC](https://discuss.tryton.org/t/unable-to-launch-tests-with-python-3-12/7322/4 "2024-05-27T09:18:50Z")

</div>

> [@maxx](#):
>
> and getting the error

Then what is the error?

---

<div class="post-metadata">

### Author: ![maxx](https://discuss-cdn.tryton.org/user_avatar/discuss.tryton.org/maxx/32/2320_2.png) [@maxx](https://discuss.tryton.org/u/maxx)
#### Post date: [May 27, 2024, 9:20am UTC](https://discuss.tryton.org/t/unable-to-launch-tests-with-python-3-12/7322/5 "2024-05-27T09:20:16Z")

</div>

Same error:

```auto
╰─ python -m unittest discover -s trytond.modules.stock.tests 
Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "/usr/lib/python3.12/unittest/ __main__.py", line 18, in <module>
    main(module=None)
  File "/usr/lib/python3.12/unittest/main.py", line 104, in __init__
    self.parseArgs(argv)
  File "/usr/lib/python3.12/unittest/main.py", line 130, in parseArgs
    self._do_discovery(argv[2:])
  File "/usr/lib/python3.12/unittest/main.py", line 253, in _do_discovery
    self.createTests(from_discovery=True, Loader=Loader)
  File "/usr/lib/python3.12/unittest/main.py", line 160, in createTests
    self.test = loader.discover(self.start, self.pattern, self.top)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/loader.py", line 307, in discover
    raise ImportError('Start directory is not importable: %r' % start_dir)
ImportError: Start directory is not importable: 'trytond.modules.stock.tests'

```

---

<div class="post-metadata">

### Author: ![ced](https://discuss-cdn.tryton.org/user_avatar/discuss.tryton.org/ced/32/1237_2.png) [@ced](https://discuss.tryton.org/u/ced)
#### Post date: [May 27, 2024, 9:26am UTC](https://discuss.tryton.org/t/unable-to-launch-tests-with-python-3-12/7322/6 "2024-05-27T09:26:17Z")

</div>

So it looks like `trytond` is not importable. If you can not do `import trytond.modules.stock.tests` in your python console, it is normal that the tests can not be run.

---

<div class="post-metadata">

### Author: ![nicoe](https://discuss-cdn.tryton.org/user_avatar/discuss.tryton.org/nicoe/32/2880_2.png) [@nicoe](https://discuss.tryton.org/u/nicoe)
#### Post date: [May 27, 2024, 9:28am UTC](https://discuss.tryton.org/t/unable-to-launch-tests-with-python-3-12/7322/7 "2024-05-27T09:28:47Z")

</div>

Try launching the tests from the `trytond` directory.

Launching from the root of the repo result in the first `trytond` directory being considered as a Namespace. I haven’t looked yet what has changed between 3.11 and 3.12 so that it has this effect.

---

<div class="post-metadata">

### Author: ![maxx](https://discuss-cdn.tryton.org/user_avatar/discuss.tryton.org/maxx/32/2320_2.png) [@maxx](https://discuss.tryton.org/u/maxx)
#### Post date: [May 27, 2024, 9:36am UTC](https://discuss.tryton.org/t/unable-to-launch-tests-with-python-3-12/7322/8 "2024-05-27T09:36:28Z")

</div>

> [@nicoe](#):
>
> Try launching the tests from the `trytond` directory.

Indeed, this is working 🙂 Thanks.

---

<div class="post-metadata">

### Author: ![ced](https://discuss-cdn.tryton.org/user_avatar/discuss.tryton.org/ced/32/1237_2.png) [@ced](https://discuss.tryton.org/u/ced)
#### Post date: [May 27, 2024, 9:53am UTC](https://discuss.tryton.org/t/unable-to-launch-tests-with-python-3-12/7322/9 "2024-05-27T09:53:55Z")

</div>

Indeed in Python 3.11 the toplevel directory can be imported as `<module 'trytond' (<_frozen_importlib_external.NamespaceLoader object at 0x7fbd9afc1110>)>`.

For me having a `PYTHONPATH=trytond` import the right file from the top directory of the repository.

---

<div class="post-metadata">

### Author: ![maxx](https://discuss-cdn.tryton.org/user_avatar/discuss.tryton.org/maxx/32/2320_2.png) [@maxx](https://discuss.tryton.org/u/maxx)
#### Post date: [May 27, 2024, 10:02am UTC](https://discuss.tryton.org/t/unable-to-launch-tests-with-python-3-12/7322/10 "2024-05-27T10:02:52Z")

</div>

Indeed, working also this way in the root of the repo:

```auto
PYTHONPATH=trytond:proteus python -m unittest discover -s trytond.modules.stock.tests

```

Thanks 🙂

---

<div class="post-metadata">

### Author: ![system](https://discuss-cdn.tryton.org/uploads/default/original/1X/c6f8ec0a40525cdcd50058c734283450a4b3d38b.png) [@system](https://discuss.tryton.org/u/system)
#### Post date: [May 27, 2024, 10:03pm UTC](https://discuss.tryton.org/t/unable-to-launch-tests-with-python-3-12/7322/11 "2024-05-27T22:03:53Z")

</div>

This topic was automatically closed 12 hours after the last reply. New replies are no longer allowed.
