#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 , 4 years ago
| Cc: | added |
|---|---|
| Easy pickings: | unset |
comment:2 by , 4 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 , 4 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 toNonebut still). Nevertheless we can fix it.Regression in ec6d2531c59466924b645f314ac33f54470d7ac3.