#32783 closed Bug (fixed)
Auoreloader crashes in a conda env.
Reported by: | JonathanNickelson | Owned by: | Mariusz Felisiak |
---|---|---|---|
Component: | Core (Management commands) | Version: | 3.2 |
Severity: | Release blocker | Keywords: | |
Cc: | William Schwartz | Triage Stage: | Accepted |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
The changes in this commit https://github.com/django/django/commit/ec6d2531c59466924b645f314ac33f54470d7ac3 to def get_child_arguments() of django/utils/autoreload.py cause a crash when running manage.py as a script from a conda env. For example:
miniconda3/envs/promotion_tool_38/bin/manage.py runserver 10.12.123.45:8183
no longer works and gives this stacktrace:
Traceback (most recent call last): File "miniconda3/envs/promotion_tool_38/bin/manage.py", line 4, in <module> __import__('pkg_resources').run_script('promotion-tool==1.0.28', 'manage.py') File "/home/srv_jaxqa/miniconda3/envs/promotion_tool_38/lib/python3.8/site-packages/pkg_resources/__init__.py", line 651, in run_script self.require(requires)[0].run_script(script_name, ns) File "/home/srv_jaxqa/miniconda3/envs/promotion_tool_38/lib/python3.8/site-packages/pkg_resources/__init__.py", line 1448, in run_script exec(code, namespace, namespace) File "/site/home/srv_jaxqa/miniconda3/envs/promotion_tool_38/lib/python3.8/site-packages/promotion_tool-1.0.28-py3.7.egg/EGG-INFO/scripts/manage.py", line 21, in <module> main() File "/site/home/srv_jaxqa/miniconda3/envs/promotion_tool_38/lib/python3.8/site-packages/promotion_tool-1.0.28-py3.7.egg/EGG-INFO/scripts/manage.py", line 17, in main execute_from_command_line(sys.argv) File "/home/srv_jaxqa/miniconda3/envs/promotion_tool_38/lib/python3.8/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line utility.execute() File "/home/srv_jaxqa/miniconda3/envs/promotion_tool_38/lib/python3.8/site-packages/django/core/management/__init__.py", line 413, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/home/srv_jaxqa/miniconda3/envs/promotion_tool_38/lib/python3.8/site-packages/django/core/management/base.py", line 354, in run_from_argv self.execute(*args, **cmd_options) File "/home/srv_jaxqa/miniconda3/envs/promotion_tool_38/lib/python3.8/site-packages/django/core/management/commands/runserver.py", line 61, in execute super().execute(*args, **options) File "/home/srv_jaxqa/miniconda3/envs/promotion_tool_38/lib/python3.8/site-packages/django/core/management/base.py", line 398, in execute output = self.handle(*args, **options) File "/home/srv_jaxqa/miniconda3/envs/promotion_tool_38/lib/python3.8/site-packages/django/core/management/commands/runserver.py", line 96, in handle self.run(**options) File "/home/srv_jaxqa/miniconda3/envs/promotion_tool_38/lib/python3.8/site-packages/django/core/management/commands/runserver.py", line 103, in run autoreload.run_with_reloader(self.inner_run, **options) File "/home/srv_jaxqa/miniconda3/envs/promotion_tool_38/lib/python3.8/site-packages/django/utils/autoreload.py", line 639, in run_with_reloader exit_code = restart_with_reloader() File "/home/srv_jaxqa/miniconda3/envs/promotion_tool_38/lib/python3.8/site-packages/django/utils/autoreload.py", line 256, in restart_with_reloader args = get_child_arguments() File "/home/srv_jaxqa/miniconda3/envs/promotion_tool_38/lib/python3.8/site-packages/django/utils/autoreload.py", line 225, in get_child_arguments if __main__.__spec__ is not None and __main__.__spec__.parent: AttributeError: module '__main__' has no attribute '__spec__'
The work around for this is to explicitly call the actual manage.py inside the EGG-INFO like this:
~/miniconda3/envs/promotion_tool_38/lib/python3.8/site-packages/promotion_tool-1.0.28-py3.7.egg/EGG-INFO/scripts/manage.py runserver 10.12.123.45:8183
After reverting the changes locally found in this method "get_child_arguments" in django/utils/autoreload.py in the commit above, the command miniconda3/envs/promotion_tool_38/bin/manage.py runserver 10.12.123.45:8183
works again, or if inside the conda env then just manage.py runserver 10.12.123.45:8183
works.
Change History (6)
comment:1 by , 3 years ago
Cc: | added |
---|---|
Easy pickings: | unset |
comment:2 by , 3 years ago
Component: | Utilities → Core (Management commands) |
---|---|
Owner: | changed from | to
Severity: | Normal → Release blocker |
Status: | new → assigned |
Summary: | Recent commit causes issues when running manage.py as a script in a conda env. Django 3.2.3 → Auoreloader crashes in a conda env. |
Triage Stage: | Unreviewed → Accepted |
comment:6 by , 3 years ago
Just for reference: the crash also happened with python -m pdb ./manage.py runserver
.
It looks like an issue in Python (see e.g. bop-42949), as far as I'm aware
__main__
should always have__spec__
attribute (sometimes set toNone
but still). Nevertheless we can fix it.Regression in ec6d2531c59466924b645f314ac33f54470d7ac3.