metamorphose / metamorphose2

Métamorphose Renamer v2
http://file-folder-ren.sourceforge.net
146 stars 33 forks source link

Refuses to launch on wxPython 3.0 #12

Open RavenB opened 9 years ago

RavenB commented 9 years ago

refuses to launch on fedora 22 claiming wxpythion 2.8 is needed while latest wxpython is installed.

pypingou commented 9 years ago

/cc

uggla commented 9 years ago

This is because Fedora 22 comes with wxpython 3.0.2 and metamorphose is looking strictly at 2.8. By the way PIL seems not anymore available on Fedora 22, replaced by Pillow but it looks compatible.

I forced the usage of wxpython to 3.0.2 by modifying the required script. The application starts and requests the language configuration. (removed ~/.metamorphose2) Then a dialogbox appears with a message "Please take a moment to set your preferences. ". I click "OK". And the application fails with this : [uggla@ugglalaptop metamorphose2]$ ./metamorphose2 -d ` src/metamorphose2.py:60: wxPyDeprecationWarning: Call to deprecated item. wx.InitAllImageHandlers() Running in debug mode Version : 0.8.3 (beta) Python 2.7.10, wxPython 3.0.2.0 Operating System : Linux System encoding : None Interface language : enUS Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged. `` (metamorphose2.py:24229): GLib-GObject-WARNING *: The property GtkButton:use-stock is deprecated and shouldn't be used anymore. It will be removed in a future version. `` (metamorphose2.py:24229): GLib-GObject-WARNING _: The property GtkSettings:gtk-button-images is deprecated and shouldn't be used anymore. It will be removed in a future version. Traceback (most recent call last): File "src/metamorphose2.py", line 85, in main() File "src/metamorphose2.py", line 76, in main application = BoaApp(0) File "/usr/lib64/python2.7/site-packages/wx-3.0-gtk3/wx/_core.py", line 8628, in init self._BootstrapApp() File "/usr/lib64/python2.7/site-packages/wx-3.0-gtk3/wx/_core.py", line 8196, in _BootstrapApp return core.PyApp__BootstrapApp(_args, _kwargs) File "src/metamorphose2.py", line 61, in OnInit self.main = MainWindow.create(None) File "/home/uggla/workspace/metamorphose2/src/MainWindow/init.py", line 45, in create return MainWindow(parent) File "/home/uggla/workspace/metamorphose2/src/MainWindow/init.py", line 662, in init self.init_ctrls(prnt) File "/home/uggla/workspace/metamorphose2/src/MainWindow/__init.py", line 412, in init_ctrls self.bottomWindow = bottomWindow.MainPanel(self.splitter, self) File "/home/uggla/workspace/metamorphose2/src/MainWindow/bottomWindow.py", line 286, in __init self.init_ctrls(prnt) File "/home/uggla/workspace/metamorphose2/src/MainWindow/bottomWindow.py", line 237, in __init_ctrls self.display = ListCtrl(self, -1, size=wx.Size(520, -1)) File "/home/uggla/workspace/metamorphose2/src/MainWindow/bottomWindow.py", line 52, in __init self.set_preferences() File "/home/uggla/workspace/metamorphose2/src/MainWindow/bottomWindow.py", line 57, in set_preferences self.green.SetBackgroundColour(prefs.get(u'renamedColor')) File "/home/uggla/workspace/metamorphose2/src/preferences/init.py", line 166, in get self.load_preferences() File "/home/uggla/workspace/metamorphose2/src/preferences/__init.py", line 92, in load_preferences self.__create_new() File "/home/uggla/workspace/metamorphose2/src/preferences/__init.py", line 58, in create_new prefDiag = Dialog(None, self, initial=True) File "/home/uggla/workspace/metamorphose2/src/preferences/dialog.py", line 113, in __init self.init_ctrls(parent) File "/home/uggla/workspace/metamorphose2/src/preferences/dialog.py", line 95, in __init_ctrls self.notebook = Notebook(id=-1, name=u'notebook', parent=self) File "/home/uggla/workspace/metamorphose2/src/preferences/dialog.py", line 52, in __init page = page(self) File "/home/uggla/workspace/metamorphose2/src/preferences/logging.py", line 100, in init self.init_ctrls(parent) File "/home/uggla/workspace/metamorphose2/src/preferences/logging.py", line 97, in __init_ctrls self.init_sizers() File "/home/uggla/workspace/metamorphose2/src/preferences/logging.py", line 52, in __init_sizers self.init_logoptions_sizer(self.logOptionsSizer) File "/home/uggla/workspace/metamorphose2/src/preferences/logging.py", line 44, in init_logoptions_sizer flag=wx.ALIGN_CENTER_VERTICAL) File "/usr/lib64/python2.7/site-packages/wx-3.0-gtk3/wx/_core.py", line 14711, in AddWindow return self.Add(_args, _kw) File "/usr/lib64/python2.7/site-packages/wx-3.0-gtk3/wx/_core.py", line 14453, in Add return core.Sizer_Add(_args, _kwargs) wx._core.PyAssertionError: C++ assertion "Assert failure" failed at ./src/common/sizer.cpp(1401) in DoInsert(): too many items (3 > 2*1) in grid sizer (maybe you should omit the number of either rows or columns?)` ``

ianare commented 9 years ago

Is wxPython 2.8 not available in Fedora 22? On Ubuntu I have 2.8 and 3.0, and I admit not having tried running under 3.0.

uggla commented 9 years ago

Hello @ianare,

Yes Fedora 22 is shipped only with 3.0.2. It was part of the main changes : https://fedoraproject.org/wiki/Releases/22/ChangeSet#wxPython_3 Fedora is bleeding edge this is cool, but sometimes it causes some compatibility issues. That's a pity because metamorphose2 is a really powerful program that I used to do some mass renaming.

I tried to investigate a bit more on the issue but I was unable to get the main window working. I'm lacking too much knowledge on wxpython and metamorphose2 internals to make it working. If you could upgrade metamorphose2 to have it running with wxpython 3.0.2 even if it is in a bad shape, then maybe I could help correcting some issues.

ianare commented 9 years ago

I've added a new release 0.8.4 which allows specifying the wxPython version:

./metamorphose2 -w 3.0

I was able to get it running on wxPython 3.0.0.0 on Mint 17 (Ubuntu 14.04 LTS), although not everything worked - preferences menu for example did not show up.

I will try with a newer version of wx and see if it crashes. appera u-met

ianare commented 9 years ago

Sorry, upon re-reading your output log, I see the problem is actually with the preferences menu... I'll see what I can do ;-)

uggla commented 9 years ago

@ianare wahou ! Thanks for your support ! I'll follow this thread and I will test it as soon as you will give me the green light.

ianare commented 9 years ago

OK it should be working now, can you test the latest master branch?

Thanks!

uggla commented 9 years ago

Hello @ianare,

It is better, but unfortunately I still get a core dump. :( Here is a report of the encountered issues.

1. Install issue.

messages/update_langs.sh --> ok make build --> ok

[uggla@ugglalaptop metamorphose2]$ sudo make install
install -d /usr/share/man/man1/
gzip -c9 manpage.1 > metamorphose2.1.gz
install -m 644 metamorphose2.1.gz /usr/share/man/man1/
cp *.html /usr/share/doc/metamorphose2/
cp: cannot stat ‘*.html’: No such file or directory
Makefile:105: recipe for target 'install-doc' failed
make: *** [install-doc] Error 1

Installation is looking for a html file and none is available. This is a minor issue, fixed by creating a html file at the root of the project.

2. Issue configuring metamorphose.

Language selection --> ok Popup 'Please take a moment to set your preferences' --> ok Preferences window --> ok (was not the case before) Click on ok is working but then metamorphose crashes. :(

[uggla@ugglalaptop ~]$ metamorphose2  -d
Running in debug mode
Version: 0.8.4 (beta)

(metamorphose2.py:6545): GLib-GObject-WARNING **: The property
GtkSettings:gtk-button-images is deprecated and shouldn't be used anymore. It
will be removed in a future version.

(metamorphose2.py:6545): GLib-GObject-WARNING **: The property
GtkAlignment:xalign is deprecated and shouldn't be used anymore. It will be
removed in a future version.

(metamorphose2.py:6545): GLib-GObject-WARNING **: The property
GtkAlignment:yalign is deprecated and shouldn't be used anymore. It will be
removed in a future version.

(metamorphose2.py:6545): GLib-GObject-WARNING **: The property
GtkButton:use-stock is deprecated and shouldn't be used anymore. It will be
removed in a future version.
Operating System: Linux - 4.1.3-200.fc22.x86_64 - #1 SMP Wed Jul 22 19:51:58
UTC 2015
System encoding: None
Python version: 2.7.10
wxPython version: 3.0.2.0
Interface language: en_US
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
*** BUG ***
In pixman_region32_init_rect: Invalid rectangle passed
Set a breakpoint on '_pixman_log_error' to debug

*** BUG ***
In pixman_region32_init_rect: Invalid rectangle passed
Set a breakpoint on '_pixman_log_error' to debug

Opening as 'w' : /home/uggla/.metamorphose2/preferences.ini
clearUndo (CheckBox) = 0
useDirTree (CheckBox) = 1
showHiddenDirs (CheckBox) = 0
encodingGroup (Choice) = 0
encodingSelect (ComboBox) = None
showPreviewIcons (CheckBox) = 1
onlyShowChangedItems (CheckBox) = 0
showPreviewHighlight (CheckBox) = 1
renRefreshMin (SpinCtrl) = 80
showProgressDialog (CheckBox) = 1
itemCountForProgDialog (SpinCtrl) = 200
willChangeColor (ColourPickerCtrl) = #E5FFE5
renamedColor (ColourPickerCtrl) = #97F27F
errorColor (ColourPickerCtrl) = #FF1616
warnColor (ColourPickerCtrl) = #FDEB22
autoSelectAll (CheckBox) = 1
reloadAfterRename (CheckBox) = 0
alwaysMakeLog (CheckBox) = 0
previewOnConfig (CheckBox) = 1
autoShowError (CheckBox) = 0
logLocation (DirPickerCtrl) = /home/uggla/.metamorphose2/undo
logSeparator (TextCtrl) = :::
logEnclose (TextCtrl) = 
logFextension (TextCtrl) = log
useWinChars (CheckBox) = 1
markWarning (RadioButton) = 1
markBadChars (RadioButton) = 0
deleteBadChars (RadioButton) = 0
useWinNames (CheckBox) = 0
winNamesWarn (RadioButton) = 1
winNamesBad (RadioButton) = 0
Opening as 'r' : /home/uggla/.metamorphose2/preferences.ini

(metamorphose2.py:6545): GLib-GObject-WARNING **: invalid (NULL) pointer
instance

(metamorphose2.py:6545): GLib-GObject-CRITICAL **: g_signal_handler_disconnect:
assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed

(metamorphose2.py:6545): Gtk-CRITICAL **: gtk_window_set_modal: assertion
'GTK_IS_WINDOW (window)' failed
Traceback (most recent call last):
  File "/usr/share/metamorphose2/metamorphose2.py", line 187, in <module>
    main(wx_version, cli_options)
  File "/usr/share/metamorphose2/metamorphose2.py", line 181, in main
    application = BoaApp(0)
  File "/usr/lib64/python2.7/site-packages/wx-3.0-gtk3/wx/_core.py", line 8628,
in __init__
    self._BootstrapApp()
  File "/usr/lib64/python2.7/site-packages/wx-3.0-gtk3/wx/_core.py", line 8196,
in _BootstrapApp
    return _core_.PyApp__BootstrapApp(*args, **kwargs)
  File "/usr/share/metamorphose2/metamorphose2.py", line 176, in OnInit
    self.main = MainWindow.create(None, cli_options)
  File "/usr/share/metamorphose2/MainWindow/__init__.py", line 45, in create
    return MainWindow(parent, options)
  File "/usr/share/metamorphose2/MainWindow/__init__.py", line 554, in __init__
    self.__init_ctrls(prnt)
  File "/usr/share/metamorphose2/MainWindow/__init__.py", line 405, in
__init_ctrls
    self.bottomWindow = bottomWindow.MainPanel(self.splitter, self)
  File "/usr/share/metamorphose2/MainWindow/bottomWindow.py", line 284, in
__init__
    self.__init_ctrls(prnt)
  File "/usr/share/metamorphose2/MainWindow/bottomWindow.py", line 236, in
__init_ctrls
    self.display = ListCtrl(self, -1, size=wx.Size(520, -1))
  File "/usr/share/metamorphose2/MainWindow/bottomWindow.py", line 53, in
__init__
    self.set_preferences()
  File "/usr/share/metamorphose2/MainWindow/bottomWindow.py", line 58, in
set_preferences
    self.green.SetBackgroundColour(prefs.get(u'renamedColor'))
  File "/usr/share/metamorphose2/preferences/__init__.py", line 178, in get
    self.__load_preferences()
  File "/usr/share/metamorphose2/preferences/__init__.py", line 102, in
__load_preferences
    self.__create_new()
  File "/usr/share/metamorphose2/preferences/__init__.py", line 66, in
__create_new
    prefDiag.Destroy()
  File "/usr/lib64/python2.7/site-packages/wx-3.0-gtk3/wx/_core.py", line
16707, in __getattr__
    raise PyDeadObjectError(self.attrStr % self._name)
wx._core.PyDeadObjectError: The C++ part of the Dialog object has been deleted,
attribute access no longer allowed.

3. Metamorphose starts.

Then metamorphose refuses to start. I guess this is normal because the configuration phase was not completed.

[uggla@ugglalaptop ~]$ metamorphose2  -d
Running in debug mode
Version: 0.8.4 (beta)
Operating System: Linux - 4.1.3-200.fc22.x86_64 - #1 SMP Wed Jul 22 19:51:58 UTC 2015
System encoding: None
Python version: 2.7.10
wxPython version: 3.0.2.0
Interface language: en_US
Opening as 'r' : /home/uggla/.metamorphose2/preferences.ini

(metamorphose2.py:6987): GLib-GObject-WARNING **: The property GtkButton:use-stock is deprecated and shouldn't be used anymore. It will be removed in a future version.

(metamorphose2.py:6987): GLib-GObject-WARNING **: The property GtkSettings:gtk-button-images is deprecated and shouldn't be used anymore. It will be removed in a future version.
loading picker core
loading sorting core
loading errors core
loading renamer core
loading operations parser
loading operations parser
loading operations parser
loading renamer preview
loading renamer engine

(metamorphose2.py:6987): GLib-GObject-WARNING **: The property GtkSettings:gtk-menu-images is deprecated and shouldn't be used anymore. It will be removed in a future version.
Segmentation fault (core dumped)
ianare commented 9 years ago

Strange, I am not getting any of these warnings and no error on startup. I will see if I can find some info on them.

Which desktop environment are you using?

bagelskat commented 9 years ago

I noticed some files are missing in the master branch compared to the source code for 0.8.2.

make install fails because readme_en.html is missing in the root directory. I got the latest version to install by adding it back.

I was missing a dependency python-wxgtk3.0. Once that was taken care of launching metamorphose worked fine by using the command metamorphose2 -w 3

I'm using Debian Stretch, Gnome 3

screenshot from 2015-09-25 00-56-36

I'll be testing it out more soon. Have a pile of files to be renamed. ;)

uggla commented 9 years ago

@ianare, sorry for the late answer. I did not noticed your message above before. I'm using Fedora 22 and Gnome 3.16.2.

javierpra commented 9 years ago

This is also related to https://github.com/metamorphose/metamorphose2/issues/13 .

uggla commented 9 years ago

@javierpra not sure if the above comment is related to mine. However in my case I manage to build the application. The problem is when I try to run it, I have a segfault and a coredump... I tested on my 2 Fedora 22 systems and I got the same on both.

nerijus commented 8 years ago

I was able to launch metamorphose2 on Fedora 23 by extracting only wx-2.8-gtk2-unicode directory to /usr/lib64/python2.7/site-packages from wxPython-2.8.12.0-8.fc21.x86_64.rpm.

careca1970 commented 8 years ago

Hi! I am on Fedora 22, and can run metamorphose2 (either from fc-repo or from git) properly, but only once downgrading wxpython to 2.8. I get the PIL-message at beginning thou...

What's the actual situation of this issue? Is there a work around that may work for fc22?

Many thanks!

ianare commented 8 years ago

I think the last commit to master fixes this bug definitely.

After much fighting with this problem, I simply removed the preferences dialog on first start. I'm thinking it was more of an annoyance anyway ;-)

Preferences are of course still available after the application starts up.

Please test, if it works for you I'll release a new version.

Thanks!

nerijus commented 8 years ago

Master still segfaults when launched with -w=3

Edit: it segfaults even when launched without -w=3. Edit2: it runs when launched with -w=2.

ianare commented 8 years ago

Damn it!

Can you run with the -d option and post the results here?

Thanks much

nerijus commented 8 years ago
$ metamorphose2 -d
Running in debug mode
Application Version: 0.9.0 (beta)
Preferences Version: 0.1.1
Init MainWindow

======== System Info =======
Operating System: Linux - 4.3.5-300.fc23.x86_64 - #1 SMP Mon Feb 1 03:18:41 UTC 2016
Python version: 2.7.10
wxPython version: 3.0.2.0 gtk3 (classic)
============================

== Interface Localization ==
04:23:19 PM: Debug: Failed to connect to session manager: SESSION_MANAGER environment variable not defined
Set language: en_US
Set encoding: None
============================

======== Preferences =======
Try to load preferences from file
Opening as 'r': /home/nerijus/.metamorphose2/preferences.ini
Old version found
Loaded 37 preferences
============================

loading picker core
loading sorting core
loading errors core
loading renamer core
loading operations parser
loading operations parser
loading operations parser
loading renamer preview
loading renamer engine
Segmentavimo klaida (core dumped)
ianare commented 8 years ago

Try to delete your preferences file: /home/nerijus/.metamorphose2/preferences.ini

It might fix it...

nerijus commented 8 years ago

Still the same:

======== Preferences =======
Try to load preferences from file
File does not exist or is empty: Using default preferences
Opening as 'r': /usr/share/metamorphose2/preferences/default.ini
Old version found
Loaded 37 preferences
============================

loading picker core
loading sorting core
loading errors core
loading renamer core
loading operations parser
loading operations parser
loading operations parser
loading renamer preview
loading renamer engine
Segmentavimo klaida (core dumped)
nerijus commented 8 years ago

BTW, I see /usr/share/metamorphose2/preferences/default.ini has the path: logLocation=/home/ianare/.metamorphose2/undo

nerijus commented 8 years ago

It launched when I deleted /home/nerijus/.metamorphose2/language.ini, but after choosing language it segfaulted again.

ianare commented 8 years ago

Well back to work... will let you know when I have something. Thnaks for the patience ;-)

ddidier commented 8 years ago

any news? doesn't work on Ubuntu 16.04 either (wxpython 3)

Abhinav1217 commented 8 years ago

I am unable to launch on Fedora 24 even with the -w comand

("\nwxPython 2.8 is required!\nRefer to 'readme_xx.html'", ' for installation instructions.\n')
[Abhinav@abhinav-f24 ~] $ metamorphose2 -w 3.0
("\nwxPython 2.8 is required!\nRefer to 'readme_xx.html'", ' for installation instructions.\n')
[Abhinav@abhinav-f24 ~] $ metamorphose2 -w 3
("\nwxPython 2.8 is required!\nRefer to 'readme_xx.html'", ' for installation instructions.\n')
[Abhinav@abhinav-f24 ~] $ metamorphose2 -d
("\nwxPython 2.8 is required!\nRefer to 'readme_xx.html'", ' for installation instructions.\n')
nippur14 commented 7 years ago

Still an issue in 2017 Fedora 24

zANavAShi commented 7 years ago

Hi ianare, any progress resolving this issue please? I just upgraded from Ubuntu Trusty LTS to Ubunt Xenial LTS and heartbroken to discover that my best ever file renaming app for linux will not run with latest Python. I messed around for 3 hours trying the tips suggested above and no luck :-(

javierpra commented 7 years ago

Here's a trace which I believe may be related.

(gdb) run /usr/share/metamorphose2/metamorphose2.py Starting program: /usr/bin/python /usr/share/metamorphose2/metamorphose2.py [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib64/libthread_db.so.1". Detaching after fork from child process 2905. [New Thread 0x7fffd53da700 (LWP 2907)] [New Thread 0x7fffd4bd9700 (LWP 2908)] Detaching after fork from child process 2909. Detaching after fork from child process 2911. Detaching after fork from child process 2913. Detaching after fork from child process 2915. Detaching after fork from child process 2917. [New Thread 0x7fffccdfc700 (LWP 2919)]

Thread 1 "python" received signal SIGSEGV, Segmentation fault. 0x00007fffee6e3d96 in wxGetTopLevelParent(wxWindow*) () from /lib64/libwx_gtk3u_core-3.0.so.0

javierpra commented 7 years ago

NOTE: The following may break other applications that rely on wxPython 3

As a workaround the following works. You can downgrade wxPython to 2.8.12. This worked for me on Fedora 24 as follows:

$wget https://kojipkgs.fedoraproject.org//packages/wxPython/2.8.12.0/9.el7/x86_64/wxPython-2.8.12.0-9.el7.x86_64.rpm

$sudo dnf downgrade wxPython-2.8.12.0-9.el7.x86_64.rpm

$cd metamorphose2/

$sudo make all

uggla commented 7 years ago

@ianare I was on fire today and I decided to really look at this issue.

Here is an early report of my findings, I probably need to look deeper in the code however, I think I have found the reason of the segfault.

I'm using Fedora 24 (wxPython 3.0.2)

The line which is causing the segfault is in /usr/share/metamorphose2/renamer/wxRenamerView.py. Line 144.

`class IntroTextPanel(wx.Panel):                                                                                                                                                                                
123     """                                                                                                                                                                                                        
124     Show intro text, set app size                                                                                                                                                                              
125     """                                                                                                                                                                                                        
126     def __init__(self, prnt, id):                                                                                                                                                                              
127     ┆   wx.Panel.__init__(self, id=id, name=u'IntroTextPanel',                                                                                                                                                 
128     ┆   ┆   ┆   ┆   ┆   ┆ parent=prnt, style=wx.TAB_TRAVERSAL)                                                                                                                                                 
129                                                                                                                                                                                                                
130     ┆   # create info text of available operations                                                                                                                                                             
131     ┆   # Find largest panel, use it to set this panel size                                                                                                                                                    
132     ┆   txt = ''                                                                                                                                                                                               
133     ┆   txtSize = (0, 0)                                                                                                                                                                                       
134     ┆   for i in range(prnt.availableOperations.GetItemCount()):                                                                                                                                               
135     ┆   ┆   op = prnt.availableOperations.GetItemText(i)                                                                                                                                                       
136     ┆   ┆   txt += "%s  :  %s\n\n" % (op, operations.defs[op][1])                                                                                                                                              
137                                                                                                                                                                                                                
138     ┆   ┆   # create temporary instance of panel to get size                                                                                                                                                   
139     ┆   ┆   op = operations.defs[op][0]                                                                                                                                                                        
140     ┆   ┆   opPanel = getattr(operations, op).OpPanel(prnt, main)                                                                                                                                              
141     ┆   ┆   size = opPanel.GetSizeTuple()                                                                                                                                                                      
142     ┆   ┆   if size > txtSize:                                                                                                                                                                                 
143     ┆   ┆   ┆   txtSize = size                                                                                                                                                                                 
144         #    opPanel.Destroy()  --> commenting this line will avoid the segfault.

So right now metamorphose is not segfaulting anymore, but the gui is screwed. That sounds normal as the panel size was probably not defined correctly.

Here is a screenshot: https://framapic.org/xsFia1T7PtN4/uEligUWjU07t.png https://framapic.org/a9vSQK9k2QSM/RxCq5Jg39Wj3.png

If someone else could do the same and confirm it is resolving the segfault, that will be great.

javierpra commented 7 years ago

@uggla @ianare So Uggla seems to have found the issue. I played with this a bit. I don't know the reason for it yet, but it doesn't seem to specifically like the Destroy() function. Changing this to Close() removes the segfault for me. I don't have much time to play with this as I used to.

line 144 opPanel.Close()

uggla commented 7 years ago

@javierpra 👍 Thanks for checking on your side.

zANavAShi commented 7 years ago

Awesome work on troubleshooting this issue guys! Any chance this might result in a bug-fix release in the near future?

Alternatively.....

Would it be safe to install a parallel (older/compatible) version of python alongside the one which comes bundled with Ubuntu Studio Xenial?

Thanks a bunch :-)

uggla commented 7 years ago

I have created Metamorphose2 Fedora RPMS. The fix is probably a bit raw. However Metamorphose can be used despite some interface glitches, probably due to wxpython3. https://copr.fedorainfracloud.org/coprs/uggla/metamorphose2/