Thanks to all and best wishes! Julius Chesoni在 2023年4月26日星期三下午9:58:23 [UTC+8]寫道:
> You must be a very good Django programmer. > > Thank you on behalf of Django community, for such a great answer that even > novices like me are able to understand. > > I had no idea that there were other non default configurations of the > variable BASE_DIR. > > > Julius. > > On Wed, Apr 26, 2023 at 1:15 AM David Nugent <[email protected]> wrote: > >> This error is being triggered by an outdated and badly behaved module >> that contains the run_cmdb_worker management command. >> >> Anything that relies on the presence of BASE_DIR in settings is bad >> behaviour. This is an entirely arbitrary variable name that might not even >> be present in a non-default configuration, and it effectively a "private" >> variable. >> >> There are better ways to determine the Django base directory (although >> reliance on same is also questionable as it probably assumes a specific >> Django layout, which is also poor behaviour). >> >> If you insist on using it, then simply wrap BASE_DIR def with a str() >> cast, or use .as_posix() member, i.e. >> >> BASE_DIR = str(Path(__file__).resolve().parent.parent) >> >> This may invalidate other uses in your settings module though, for >> example: >> >> BASE_DIR / 'someothervalue' >> >> If your change does not trigger an error otherwise, then you are probably >> fine. >> >> Regards, >> David >> >> >> On Mon, Apr 24, 2023 at 2:21 AM DL <[email protected]> wrote: >> >>> Django 4.2 >>> Python 3.10.10 >>> >>> # python manage.py run_cmdb_worker >>> Traceback (most recent call last): >>> File "/usr/local/python/lib/python3.10/pkgutil.py", line 417, in >>> get_importer >>> importer = sys.path_importer_cache[path_item] >>> KeyError: PosixPath('/www/cloudadmin') >>> >>> During handling of the above exception, another exception occurred: >>> >>> Traceback (most recent call last): >>> File "/www/cloudadmin/manage.py", line 22, in <module> >>> main() >>> File "/www/cloudadmin/manage.py", line 18, in main >>> execute_from_command_line(sys.argv) >>> File >>> "/opt/.pyvenv/lib/python3.10/site-packages/django/core/management/__init__.py", >>> >>> line 442, in execute_from_command_line >>> utility.execute() >>> File >>> "/opt/.pyvenv/lib/python3.10/site-packages/django/core/management/__init__.py", >>> >>> line 436, in execute >>> self.fetch_command(subcommand).run_from_argv(self.argv) >>> File >>> "/opt/.pyvenv/lib/python3.10/site-packages/django/core/management/__init__.py", >>> >>> line 275, in fetch_command >>> klass = load_command_class(app_name, subcommand) >>> File >>> "/opt/.pyvenv/lib/python3.10/site-packages/django/core/management/__init__.py", >>> >>> line 48, in load_command_class >>> module = import_module("%s.management.commands.%s" % (app_name, >>> name)) >>> File "/usr/local/python/lib/python3.10/importlib/__init__.py", line >>> 126, in import_module >>> return _bootstrap._gcd_import(name[level:], package, level) >>> File "<frozen importlib._bootstrap>", line 1050, in _gcd_import >>> File "<frozen importlib._bootstrap>", line 1027, in _find_and_load >>> File "<frozen importlib._bootstrap>", line 1006, in >>> _find_and_load_unlocked >>> File "<frozen importlib._bootstrap>", line 688, in _load_unlocked >>> File "<frozen importlib._bootstrap_external>", line 883, in exec_module >>> File "<frozen importlib._bootstrap>", line 241, in >>> _call_with_frames_removed >>> File >>> "/www/cloudadmin/apps/cmdb/management/commands/run_cmdb_worker.py", line 2, >>> in <module> >>> from cmdb.scheduler import Scheduler >>> File "/www/cloudadmin/apps/cmdb/scheduler.py", line 3, in <module> >>> from apscheduler.schedulers.background import BackgroundScheduler >>> File >>> "/opt/.pyvenv/lib/python3.10/site-packages/apscheduler/__init__.py", line >>> 1, in <module> >>> from pkg_resources import get_distribution, DistributionNotFound >>> File >>> "/opt/.pyvenv/lib/python3.10/site-packages/pkg_resources/__init__.py", line >>> 3260, in <module> >>> def _initialize_master_working_set(): >>> File >>> "/opt/.pyvenv/lib/python3.10/site-packages/pkg_resources/__init__.py", line >>> 3234, in _call_aside >>> f(*args, **kwargs) >>> File >>> "/opt/.pyvenv/lib/python3.10/site-packages/pkg_resources/__init__.py", line >>> 3272, in _initialize_master_working_set >>> working_set = WorkingSet._build_master() >>> File >>> "/opt/.pyvenv/lib/python3.10/site-packages/pkg_resources/__init__.py", line >>> 572, in _build_master >>> ws = cls() >>> File >>> "/opt/.pyvenv/lib/python3.10/site-packages/pkg_resources/__init__.py", line >>> 565, in __init__ >>> self.add_entry(entry) >>> File >>> "/opt/.pyvenv/lib/python3.10/site-packages/pkg_resources/__init__.py", line >>> 621, in add_entry >>> for dist in find_distributions(entry, True): >>> File >>> "/opt/.pyvenv/lib/python3.10/site-packages/pkg_resources/__init__.py", line >>> 1988, in find_distributions >>> importer = get_importer(path_item) >>> File "/usr/local/python/lib/python3.10/pkgutil.py", line 421, in >>> get_importer >>> importer = path_hook(path_item) >>> File "<frozen importlib._bootstrap_external>", line 1632, in >>> path_hook_for_FileFinder >>> File "<frozen importlib._bootstrap_external>", line 1504, in __init__ >>> File "<frozen importlib._bootstrap_external>", line 182, in _path_isabs >>> AttributeError: 'PosixPath' object has no attribute 'startswith' >>> >>> I must midify settings.py, change BASE_DIR, it can run >>> # BASE_DIR = Path(__file__).resolve().parent.parent >>> BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)) >>> >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Django users" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to [email protected]. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/django-users/033f2f50-b073-4a97-9d66-6cc7f8a18049n%40googlegroups.com >>> >>> <https://groups.google.com/d/msgid/django-users/033f2f50-b073-4a97-9d66-6cc7f8a18049n%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> >> -- >> You received this message because you are subscribed to the Google Groups >> "Django users" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> > To view this discussion on the web visit >> https://groups.google.com/d/msgid/django-users/CAE5VhgVp2UiGc_Dh0jzcg4hTijXtKk8f0PE8axDpLKbky1xo_g%40mail.gmail.com >> >> <https://groups.google.com/d/msgid/django-users/CAE5VhgVp2UiGc_Dh0jzcg4hTijXtKk8f0PE8axDpLKbky1xo_g%40mail.gmail.com?utm_medium=email&utm_source=footer> >> . >> > -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/879d1244-daea-4baf-8800-f701051566e1n%40googlegroups.com.

