From 3990333f3d5d888df8f713b79812d5aa1a74bb17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciro=20Santilli=20=E5=85=AD=E5=9B=9B=E4=BA=8B=E4=BB=B6=20?= =?UTF-8?q?=E6=B3=95=E8=BD=AE=E5=8A=9F?= Date: Tue, 20 Oct 2020 01:00:00 +0000 Subject: [PATCH] python relative import --- README.adoc | 15 ++++++++++++++ .../lkmc/python/relative_import/README.adoc | 1 + .../lkmc/python/relative_import/__init__.py | 0 .../python/relative_import/mydir/__init__.py | 0 .../relative_import/mydir/myfile_user.py | 7 +++++++ .../lkmc/python/relative_import/myfile.py | 1 + .../python/relative_import/myfile_user.py | 7 +++++++ .../lkmc/python/relative_import/test | 20 +++++++++++++++++++ 8 files changed, 51 insertions(+) create mode 100644 rootfs_overlay/lkmc/python/relative_import/README.adoc create mode 100644 rootfs_overlay/lkmc/python/relative_import/__init__.py create mode 100644 rootfs_overlay/lkmc/python/relative_import/mydir/__init__.py create mode 100755 rootfs_overlay/lkmc/python/relative_import/mydir/myfile_user.py create mode 100644 rootfs_overlay/lkmc/python/relative_import/myfile.py create mode 100755 rootfs_overlay/lkmc/python/relative_import/myfile_user.py create mode 100755 rootfs_overlay/lkmc/python/relative_import/test diff --git a/README.adoc b/README.adoc index 071748a..cf183d8 100644 --- a/README.adoc +++ b/README.adoc @@ -18506,6 +18506,8 @@ The only `Impl` used appears to be `O3CPUImpl`? This is explicitly instantiated template class O3ThreadContext; .... +see also: https://stackoverflow.com/questions/64420547/in-gem5-how-do-i-know-the-specific-location-of-the-class/64423633#64423633 + Unlike in `SimpleThread` however, `O3ThreadContext` does not contain the register data itself, e.g. `O3ThreadContext::readIntRegFlat` instead forwards to `cpu`: .... @@ -20912,6 +20914,19 @@ link:rootfs_overlay/lkmc/python/unittest_find/[] contains examples to test how t * https://stackoverflow.com/questions/1732438/how-do-i-run-all-python-unit-tests-in-a-directory * https://stackoverflow.com/questions/46976256/recursive-unittest-discovery-with-python3-and-without-init-py-files +====== Python relative imports + +link:rootfs_overlay/lkmc/python/relative_import/[] contains examples to test how how to do relative imports in Python. + +This subject is impossible to understand. + +Related questions: + +* https://stackoverflow.com/questions/16981921/relative-imports-in-python-3 +* https://stackoverflow.com/questions/14132789/relative-imports-for-the-billionth-time +* https://stackoverflow.com/questions/21490860/relative-imports-with-unittest-in-python +* https://stackoverflow.com/questions/714063/importing-modules-from-parent-folder + ===== Build and install the interpreter Buildroot has a Python package that can be added to the guest image: diff --git a/rootfs_overlay/lkmc/python/relative_import/README.adoc b/rootfs_overlay/lkmc/python/relative_import/README.adoc new file mode 100644 index 0000000..825f1f2 --- /dev/null +++ b/rootfs_overlay/lkmc/python/relative_import/README.adoc @@ -0,0 +1 @@ +https://cirosantilli.com/linux-kernel-module-cheat#python-relative-imports diff --git a/rootfs_overlay/lkmc/python/relative_import/__init__.py b/rootfs_overlay/lkmc/python/relative_import/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/rootfs_overlay/lkmc/python/relative_import/mydir/__init__.py b/rootfs_overlay/lkmc/python/relative_import/mydir/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/rootfs_overlay/lkmc/python/relative_import/mydir/myfile_user.py b/rootfs_overlay/lkmc/python/relative_import/mydir/myfile_user.py new file mode 100755 index 0000000..75755b3 --- /dev/null +++ b/rootfs_overlay/lkmc/python/relative_import/mydir/myfile_user.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +import myfile + +assert myfile.a == 1 + +b = myfile.a + 1 diff --git a/rootfs_overlay/lkmc/python/relative_import/myfile.py b/rootfs_overlay/lkmc/python/relative_import/myfile.py new file mode 100644 index 0000000..1337a53 --- /dev/null +++ b/rootfs_overlay/lkmc/python/relative_import/myfile.py @@ -0,0 +1 @@ +a = 1 diff --git a/rootfs_overlay/lkmc/python/relative_import/myfile_user.py b/rootfs_overlay/lkmc/python/relative_import/myfile_user.py new file mode 100755 index 0000000..1042dab --- /dev/null +++ b/rootfs_overlay/lkmc/python/relative_import/myfile_user.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +import myfile +import mydir.myfile_user + +assert myfile.a == 1 +assert mydir.myfile_user.b == 2 diff --git a/rootfs_overlay/lkmc/python/relative_import/test b/rootfs_overlay/lkmc/python/relative_import/test new file mode 100755 index 0000000..b63d1ba --- /dev/null +++ b/rootfs_overlay/lkmc/python/relative_import/test @@ -0,0 +1,20 @@ +#!/usr/bin/env bash +set -eux + +# myfile_user works from all directories. +./myfile_user.py +cd .. +relative_import/myfile_user.py +cd relative_import/mydir +../myfile_user.py +cd .. + +# TODO any better way to run mydir/myfile_user.py? + +# ./mydir/myfile_user.py +#Traceback (most recent call last): +# File "./mydir/myfile_user.py", line 3, in +# import myfile +#ModuleNotFoundError: No module named 'myfile' + +python -m mydir.myfile_user