nephila / djangocms-installer

Console wizard to bootstrap django CMS projects
https://djangocms-installer.readthedocs.io/
BSD 3-Clause "New" or "Revised" License
177 stars 78 forks source link

subprocess.CalledProcessError, I can't install on python 3.6 #333

Closed Ruizhijian closed 4 years ago

Ruizhijian commented 5 years ago

(venv) MichaeldeMacBook-Pro:untitled1 michael$ djangocms mysite Creating the project Please wait while I install dependencies If I am stuck for a long time, please check for connectivity / PyPi issues You are using pip version 10.0.1, however version 18.1 is available. You should consider upgrading via the 'pip install --upgrade pip' command. Dependencies installed Creating the project The installation has failed.


Check documentation at https://djangocms-installer.readthedocs.io


Traceback (most recent call last): File "/Users/michael/PycharmProjects/untitled1/venv/bin/djangocms", line 11, in sys.exit(execute()) File "/Users/michael/PycharmProjects/untitled1/venv/lib/python3.7/site-packages/djangocms_installer/main.py", line 44, in execute django.setup_database(config_data) File "/Users/michael/PycharmProjects/untitled1/venv/lib/python3.7/site-packages/djangocms_installer/django/init.py", line 407, in setup_database command, env=env, stderr=subprocess.STDOUT File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/subprocess.py", line 376, in check_output **kwargs).stdout File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/subprocess.py", line 468, in run output=stdout, stderr=stderr) subprocess.CalledProcessError: Command '['/Users/michael/PycharmProjects/untitled1/venv/bin/python', '-W', 'ignore', 'manage.py', 'migrate']' returned non-zero exit status 1. (venv) MichaeldeMacBook-Pro:untitled1 michael$

But python2.7 is fine

yakky commented 5 years ago

Thanks @Ruizhijian for reporting, could you run with --verbose argument to get more information about what went wrong?

greyhare commented 5 years ago

I don't know about him, but I'm getting the same problem, and using verbose adds this dump before the one pasted above:

(Omitted pip spam) Successfully installed Django-2.1.9 Pillow-6.0.0 Unidecode-1.0.23 django-classy-tags-0.9.0 django-cms-3.6.0 django-filer-1.5.0 django-formtools-2.1 django-js-asset-1.2.2 django-mptt-0.10.0 django-polymorphic-2.0.3 django-sekizai-1.0.0 django-treebeard-4.3 djangocms-admin-style-1.2.9 djangocms-attributes-field-1.1.0 djangocms-column-1.9.0 djangocms-file-2.3.0 djangocms-googlemap-1.3.0 djangocms-link-2.4.0 djangocms-picture-2.0.8 djangocms-snippet-2.1.0 djangocms-style-2.2.0 djangocms-text-ckeditor-3.7.0 djangocms-video-2.0.5 easy-thumbnails-2.6 html5lib-1.0.1 psycopg2-2.8.3 webencodings-0.5.1 Dependencies installed Creating the project Project creation command: /Users/desimone/venv-dcms/bin/python /Users/desimone/venv-dcms/bin/django-admin.py startproject mainwebsite /Users/desimone/project_dir Database setup commands: /Users/desimone/venv-dcms/bin/python -W ignore manage.py migrate Operations to perform: Apply all migrations: admin, auth, cms, contenttypes, djangocms_column, djangocms_file, djangocms_googlemap, djangocms_link, djangocms_picture, djangocms_snippet, djangocms_style, djangocms_text_ckeditor, djangocms_video, easy_thumbnails, filer, menus, sessions, sites Running migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying admin.0003_logentry_add_action_flag_choices... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying auth.0008_alter_user_username_max_length... OK Applying auth.0009_alter_user_last_name_max_length... OK Applying sites.0001_initial... OK Applying cms.0001_initial... OK Applying cms.0002_auto_20140816_1918... OK Applying cms.0003_auto_20140926_2347... OK Applying cms.0004_auto_20140924_1038... OK Applying cms.0005_auto_20140924_1039... OK Applying cms.0006_auto_20140924_1110... OK Applying cms.0007_auto_20141028_1559... OK Applying cms.0008_auto_20150208_2149... OK Applying cms.0008_auto_20150121_0059... OK Applying cms.0009_merge... OK Applying cms.0010_migrate_use_structure... OK Applying cms.0011_auto_20150419_1006... OK Applying cms.0012_auto_20150607_2207... OK Applying cms.0013_urlconfrevision... OK Applying cms.0014_auto_20160404_1908... OK Applying cms.0015_auto_20160421_0000... OK Applying cms.0016_auto_20160608_1535... OK Applying cms.0017_pagetype... OK Applying cms.0018_create_pagenode... OK Applying cms.0019_set_pagenode...Traceback (most recent call last): File "manage.py", line 15, in execute_from_command_line(sys.argv) File "/Users/desimone/venv-dcms/lib/python3.6/site-packages/django/core/management/init.py", line 381, in execute_from_command_line utility.execute() File "/Users/desimone/venv-dcms/lib/python3.6/site-packages/django/core/management/init.py", line 375, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/Users/desimone/venv-dcms/lib/python3.6/site-packages/django/core/management/base.py", line 316, in run_from_argv self.execute(*args, cmd_options) File "/Users/desimone/venv-dcms/lib/python3.6/site-packages/django/core/management/base.py", line 353, in execute output = self.handle(*args, *options) File "/Users/desimone/venv-dcms/lib/python3.6/site-packages/django/core/management/base.py", line 83, in wrapped res = handle_func(args, kwargs) File "/Users/desimone/venv-dcms/lib/python3.6/site-packages/django/core/management/commands/migrate.py", line 203, in handle fake_initial=fake_initial, File "/Users/desimone/venv-dcms/lib/python3.6/site-packages/django/db/migrations/executor.py", line 117, in migrate state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial) File "/Users/desimone/venv-dcms/lib/python3.6/site-packages/django/db/migrations/executor.py", line 147, in _migrate_all_forwards state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial) File "/Users/desimone/venv-dcms/lib/python3.6/site-packages/django/db/migrations/executor.py", line 244, in apply_migration state = migration.apply(state, schema_editor) File "/Users/desimone/venv-dcms/lib/python3.6/site-packages/cms/migrations/0019_set_pagenode.py", line 68, in apply connection.introspection.get_table_description(connection.cursor(), 'cms_page') File "/Users/desimone/venv-dcms/lib/python3.6/site-packages/django/db/backends/postgresql/introspection.py", line 69, in get_table_description for line in cursor.description File "/Users/desimone/venv-dcms/lib/python3.6/site-packages/django/db/backends/postgresql/introspection.py", line 69, in for line in cursor.description TypeError: sequence index must be integer, not 'slice' The installation has failed.

Not sure if this is for here or upstream.

yakky commented 5 years ago

@greyhare I think that it's related to this divio/django-cms#6666

I think I will release a patch version which will pin psycopg2<2.8 that fixes the issues

yakky commented 5 years ago

psycopg2 pinned to < 2.8 in 1.1.1

@greyhare could you check if this fixes your issue

greyhare commented 5 years ago

It coughs up this warning now:

/Users/desimone/venv-dcms/lib/python3.6/site-packages/psycopg2/init.py:144: UserWarning: The psycopg2 wheel package will be renamed from release 2.8; in order to keep installing from binary please use "pip install psycopg2-binary" instead. For details see: http://initd.org/psycopg/docs/install.html#binary-install-from-pypi.

But the installer runs successfully. Now on to the next thing: http://127.0.0.1:8000/en/ gets a 404:

Using the URLconf defined in mainwebsite.urls, Django tried these URL patterns, in this order:

^media/(?P<path>.*)$
^static\/(?P<path>.*)$
^sitemap\.xml$
en/ ^admin/
en/ ^ ^cms_login/$ [name='cms_login']
en/ ^ ^cms_wizard/
en/ ^ ^(?P<slug>[0-9A-Za-z-_.//]+)/$ [name='pages-details-by-slug']
en/ ^ ^$ [name='pages-root']

The current path, /en/, didn't match any of these.

Seems like it should match option 8, but anyway.

yakky commented 5 years ago

@greyhare the warning is something we can't remove: according to my psycopg2 made a lot of mess with psycopg2 / psycopg2-binary packages and the former is now the recommended for production, but in version 2.7.7 which we are forced to use, it spits out that nonsense (see http://initd.org/psycopg/docs/install.html#change-in-binary-packages-between-psycopg-2-7-and-2-8)

I can't reproduce the 404: I get the django cms login screen: image (project setup with djangocms abcde)

greyhare commented 5 years ago

I've narrowed down the problem to --starting-page yes, whether it's in the config file or the command line, breaks it. Diffing output trees...

yakky commented 5 years ago

@greyhare ouch. Thanks for the detail. I see what has gone wrong, I will prepare a patch soon

greyhare commented 5 years ago

No significant difference in the generated code. Looking at the diffs in the generated databases.

greyhare commented 5 years ago

What was it? I'm still reading dumps. is_home is False for all the pages it seems, but I don't know if that's Bad.

yakky commented 5 years ago

The problem is that in django CMS 3.5+ we must call page.set_as_homepage in starting_page.py

greyhare commented 5 years ago

OK, let me know when it's patched.

greyhare commented 5 years ago

Looks like there's two home pages, too:

COPY public.cms_page (id, created_by, changed_by, creation_date, changed_date, publication_date, publication_end_date, in_navigation, soft_root, reverse_id, navigation_extenders, template, login_required, limit_visibility_in_menu, is_home, application_urls, application_namespace, publisher_is_draft, languages, xframe_options, publisher_public_id, is_page_type, node_id) FROM stdin; 2 admin admin 2019-06-29 19:17:11.947465-05 2019-06-29 19:17:11.947475-05 2019-06-29 19:17:11.94732-05 \N f f \N \N feature.html f \N f \N \N f en 0 1 f 1 1 script admin 2019-06-29 19:17:11.85293-05 2019-06-29 19:17:11.85296-05 2019-06-29 19:17:11.94732-05 \N f f \N \N feature.html f \N f \N \N t en 0 2 f 1 \.

greyhare commented 5 years ago

Definitely looks like there's two pages:

COPY public.cms_page (id, created_by, changed_by, creation_date, changed_date, publication_date, publication_end_date, in_navigation, soft_root, reverse_id, navigation_extenders, template, login_required, limit_visibility_in_menu, is_home, application_urls, application_namespace, publisher_is_draft, languages, xframe_options, publisher_public_id, is_page_type, node_id) FROM stdin; 2 admin admin 2019-06-29 19:17:11.947465-05 2019-06-29 19:17:11.947475-05 2019-06-29 19:17:11.94732-05 \N f f \N \N feature.html f \N f \N \N f en 0 1 f 1 1 script admin 2019-06-29 19:17:11.85293-05 2019-06-29 19:17:11.85296-05 2019-06-29 19:17:11.94732-05 \N f f \N \N feature.html f \N f \N \N t en 0 2 f 1 \.

All other differences are migration timestamps and auto-increment counts.

yakky commented 5 years ago

django CMS always keep a live and draft version of the same page, hence the two records you see in the database

greyhare commented 5 years ago

Pasted the wrong table the second time. Here's the right one:

COPY public.cms_page (id, created_by, changed_by, creation_date, changed_date, publication_date, publication_end_date, in_navigation, soft_root, reverse_id, navigation_extenders, template, login_required, limit_visibility_in_menu, is_home, application_urls, application_namespace, publisher_is_draft, languages, xframe_options, publisher_public_id, is_page_type, node_id) FROM stdin; 2 admin admin 2019-06-29 19:17:11.947465-05 2019-06-29 19:17:11.947475-05 2019-06-29 19:17:11.94732-05 \N f f \N \N feature.html f \N f \N \N f en 0 1 f 1 1 script admin 2019-06-29 19:17:11.85293-05 2019-06-29 19:17:11.85296-05 2019-06-29 19:17:11.94732-05 \N f f \N \N feature.html f \N f \N \N t en 0 2 f 1 \.

greyhare commented 5 years ago

OK, I see it: publisher_is_draft changes.

greyhare commented 5 years ago

You can shut the warning up by modifying your manage.py:

import os
import sys
import warnings

if __name__ == '__main__':
    warnings.filterwarnings(
        'ignore', r'The psycopg2.*release 2\.8', UserWarning, 'psycopg2')
    # ... rest of code ...
yakky commented 5 years ago

@greyhare I opened the PR for the starting page issue, could you test it in your environment?

regarding the psycopg2 warning, I don't think we should ship such a filtering: it would be too opinionated given the scope of this tool Hopefully the incompatibility between pyscopg2 and django will be solved and we will be able to remove the version pinning

greyhare commented 5 years ago

I'm not recommending shipping withthe filter. I'm recommending putting the filter where people searching for the warning in conjunction with this project will find it, so they can make a decision themselves. manage.py is not complex code, and people usually have changes of their own anyway. Let them make the call.

yakky commented 5 years ago

Ah ok, I guess we can add a note in the readme