Open BestQualityVacuum opened 2 years ago
Thanks, I've labelled this bug, it definitely looks like one; can you try deleting *.lock file after quitting Qt, then re-opening Qt again?
Assuming that it works OK like that, we'll still need to fix the behaviour you described of course.
However, the debug message and the core dump here have me worried that it might instead be some library-level incompatibility. Someone will need to start by reproducing your error case.
OK I have failed to reproduce this - probably not surprising as per my last paragraph above, about the nature of those error messages.
I did the following, on signet, on current master ed6f745372f3706c19ffcb07ac7be2f860c495b2 :
.signet5.jmdat.lock
) manually in the wallets folder./joinmarket-qt.sh
, get wallet open dialog.signet5.jmdat.lock
.So I think we'd first need to establish if you can open and run things normally, it seems like there's some library incompatibility, probably in the Qt libraries.
Thanks, I've labelled this bug, it definitely looks like one; can you try deleting *.lock file after quitting Qt, then re-opening Qt again?
Once I do this, qt opens normally, it shows me the "Open Wallet" form, I choose the wallet file, enter the passphrase, and it shuts down and prints the error above.
It looks to me this could be issue with Python and / or Qt library versions.
Could you do the following in command line and copy / paste all output here?
$ cd /home/angelo/Downloads/tor-browser_en-US/Browser/Downloads/joinmarket-clientserver-0.9.7/
$ source jmvenv/bin/activate
$ python --version
$ pip list | grep 'PySide\|PyQt'
Yes.
(jmvenv) username@computer:~/Downloads/tor-browser_en-US/Browser/Downloads/joinmarket-clientserver-0.9.7$ python --version
Python 3.10.4
(jmvenv) username@computer:~/Downloads/tor-browser_en-US/Browser/Downloads/joinmarket-clientserver-0.9.7$ pip list | grep 'PySide\|PyQt'
PyQt5 5.15.7
PyQt5-Qt5 5.15.2
PyQt5-sip 12.11.0
PySide2 5.15.2.1
You could perhaps try this fix that was made a while back: https://github.com/JoinMarket-Org/joinmarket-clientserver/commit/61edd03ac09f1a5945f948f8203185dce0f04339#diff-fb36fac83bad8e5317ae7a1e2bbb7aff1fa5274b8da55e7ce056782ca9dba52eR3 (see the Issue #737 in the comments for some details on that; in particular this comment).
You could also try to pin the exact version of PySide2 that I have (5.14.2.3) though that probably doesn't matter (the issue seems to be in PySide2 5.15):
PyQt5 5.15.6
PyQt5-Qt5 5.15.2
PyQt5-sip 12.9.0
PySide2 5.14.2.3
(Btw I forgot to say, of course, that currently we disallow 5.15.2 in requirement/gui.txt, but not 5.15.2.1).
I open requirements/gui.txt
and see pywin32; platform_system == "Windows"
in line 2. My operating system isn't Windows, but Ubuntu (22.04).
As for your last response(s): I don't think you've made it clear what you recommend me to do. Should I re-install some dependency?
I open requirements/gui.txt and see pywin32; platform_system == "Windows" in line 2. My operating system isn't Windows, but Ubuntu (22.04).
Don't worry about that; it'll be ignored if you're not on Windows.
As for your last response(s): I don't think you've made it clear what you recommend me to do. Should I re-install some dependency?
Yes, sorry, to be clearer: I was suggesting replacing
PySide2!=5.15.0,!=5.15.1,!=5.15.2,!=6.0
in that file with:
PySide2==5.14.2.3
, and then repeating the installation.
... although, I would not be surprised if it doesn't work; if it doesn't, it'll be something related to differences between 22.04 ubuntu and the 20.04 that I'm using.
I can't install it with this new line.
ERROR: Ignored the following versions that require a different python version: 5.14.0 Requires-Python >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <3.9; 5.14.1 Requires-Python >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <3.9; 5.14.2 Requires-Python >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <3.9; 5.14.2.1 Requires-Python >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <3.9; 5.14.2.2 Requires-Python >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <3.9; 5.14.2.3 Requires-Python >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <3.9; 5.15.0 Requires-Python >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <3.9; 5.15.1 Requires-Python >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <3.10; 5.15.2 Requires-Python >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <3.10
ERROR: Could not find a version that satisfies the requirement PySide2==5.14.2.3 (from versions: 0.0.0a1, 5.11.0, 5.11.1, 5.11.2, 5.12.0, 5.12.1, 5.12.2, 5.12.3, 5.12.4, 5.12.5, 5.12.6, 5.13.0, 5.13.1, 5.13.2, 5.15.2.1)
ERROR: No matching distribution found for PySide2==5.14.2.3
Joinmarket was not installed. Exiting.
username@computer:~/Downloads/tor-browser_en-US/Browser/Downloads/joinmarket-clientserver-0.9.7$
Yes, as I feared. So it seems 5.14 is not available there for your Python version. Notice it says:
5.14.2 Requires-Python >=2.7, !=3.0., !=3.1., !=3.2., !=3.3., !=3.4.*, <3.9;
So you'd have to run with Python 3.8, I'm guessing you're currently on 3.9 or 3.10 (edit: sorry you already told us, it's 3.10).
If that is very inconvenient (you could try sudo apt install python3.8
, and then, if that works, run ./install.sh -p python3.8
so that the Joinmarket virtualenv uses that version of Python, instead of your default version), then I don't currently have another solution, i.e. one that works seamlessly with default Python on Ubuntu 22.04. Even if you do that, I can't guarantee it will work, but it's at least plausible.
Once I run ./install.sh -p python3.8
after I've installed python3.8, this is what I get:
Libraries have been installed in:
/home/username/Downloads/tor-browser_en-US/Browser/Downloads/joinmarket-clientserver-0.9.7/jmvenv/lib
If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the '-LLIBDIR'
flag during linking and do at least one of the following:
- add LIBDIR to the 'LD_LIBRARY_PATH' environment variable
during execution
- add LIBDIR to the 'LD_RUN_PATH' environment variable
during linking
- use the '-Wl,-rpath -Wl,LIBDIR' linker flag
- have your system administrator add LIBDIR to '/etc/ld.so.conf'
See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
gmake[4]: Nothing to be done for 'install-data-am'.
gmake[4]: Leaving directory '/home/username/Downloads/tor-browser_en-US/Browser/Downloads/joinmarket-clientserver-0.9.7/deps/libsodium-1.0.18/src/libsodium'
gmake[3]: Leaving directory '/home/username/Downloads/tor-browser_en-US/Browser/Downloads/joinmarket-clientserver-0.9.7/deps/libsodium-1.0.18/src/libsodium'
gmake[2]: Leaving directory '/home/username/Downloads/tor-browser_en-US/Browser/Downloads/joinmarket-clientserver-0.9.7/deps/libsodium-1.0.18/src/libsodium'
gmake[2]: Entering directory '/home/username/Downloads/tor-browser_en-US/Browser/Downloads/joinmarket-clientserver-0.9.7/deps/libsodium-1.0.18/src'
gmake[3]: Entering directory '/home/username/Downloads/tor-browser_en-US/Browser/Downloads/joinmarket-clientserver-0.9.7/deps/libsodium-1.0.18/src'
gmake[3]: Nothing to be done for 'install-exec-am'.
gmake[3]: Nothing to be done for 'install-data-am'.
gmake[3]: Leaving directory '/home/username/Downloads/tor-browser_en-US/Browser/Downloads/joinmarket-clientserver-0.9.7/deps/libsodium-1.0.18/src'
gmake[2]: Leaving directory '/home/username/Downloads/tor-browser_en-US/Browser/Downloads/joinmarket-clientserver-0.9.7/deps/libsodium-1.0.18/src'
gmake[1]: Leaving directory '/home/username/Downloads/tor-browser_en-US/Browser/Downloads/joinmarket-clientserver-0.9.7/deps/libsodium-1.0.18/src'
Making install in test
gmake[1]: Entering directory '/home/username/Downloads/tor-browser_en-US/Browser/Downloads/joinmarket-clientserver-0.9.7/deps/libsodium-1.0.18/test'
Making install in default
gmake[2]: Entering directory '/home/username/Downloads/tor-browser_en-US/Browser/Downloads/joinmarket-clientserver-0.9.7/deps/libsodium-1.0.18/test/default'
gmake[3]: Entering directory '/home/username/Downloads/tor-browser_en-US/Browser/Downloads/joinmarket-clientserver-0.9.7/deps/libsodium-1.0.18/test/default'
gmake[3]: Nothing to be done for 'install-exec-am'.
gmake[3]: Nothing to be done for 'install-data-am'.
gmake[3]: Leaving directory '/home/username/Downloads/tor-browser_en-US/Browser/Downloads/joinmarket-clientserver-0.9.7/deps/libsodium-1.0.18/test/default'
gmake[2]: Leaving directory '/home/username/Downloads/tor-browser_en-US/Browser/Downloads/joinmarket-clientserver-0.9.7/deps/libsodium-1.0.18/test/default'
gmake[2]: Entering directory '/home/username/Downloads/tor-browser_en-US/Browser/Downloads/joinmarket-clientserver-0.9.7/deps/libsodium-1.0.18/test'
gmake[3]: Entering directory '/home/username/Downloads/tor-browser_en-US/Browser/Downloads/joinmarket-clientserver-0.9.7/deps/libsodium-1.0.18/test'
gmake[3]: Nothing to be done for 'install-exec-am'.
gmake[3]: Nothing to be done for 'install-data-am'.
gmake[3]: Leaving directory '/home/username/Downloads/tor-browser_en-US/Browser/Downloads/joinmarket-clientserver-0.9.7/deps/libsodium-1.0.18/test'
gmake[2]: Leaving directory '/home/username/Downloads/tor-browser_en-US/Browser/Downloads/joinmarket-clientserver-0.9.7/deps/libsodium-1.0.18/test'
gmake[1]: Leaving directory '/home/username/Downloads/tor-browser_en-US/Browser/Downloads/joinmarket-clientserver-0.9.7/deps/libsodium-1.0.18/test'
gmake[1]: Entering directory '/home/username/Downloads/tor-browser_en-US/Browser/Downloads/joinmarket-clientserver-0.9.7/deps/libsodium-1.0.18'
gmake[2]: Entering directory '/home/username/Downloads/tor-browser_en-US/Browser/Downloads/joinmarket-clientserver-0.9.7/deps/libsodium-1.0.18'
gmake[2]: Nothing to be done for 'install-exec-am'.
/usr/bin/mkdir -p '/home/username/Downloads/tor-browser_en-US/Browser/Downloads/joinmarket-clientserver-0.9.7/jmvenv/lib/pkgconfig'
/usr/bin/install -c -m 644 libsodium.pc '/home/username/Downloads/tor-browser_en-US/Browser/Downloads/joinmarket-clientserver-0.9.7/jmvenv/lib/pkgconfig'
gmake[2]: Leaving directory '/home/username/Downloads/tor-browser_en-US/Browser/Downloads/joinmarket-clientserver-0.9.7/deps/libsodium-1.0.18'
gmake[1]: Leaving directory '/home/username/Downloads/tor-browser_en-US/Browser/Downloads/joinmarket-clientserver-0.9.7/deps/libsodium-1.0.18'
~/Downloads/tor-browser_en-US/Browser/Downloads/joinmarket-clientserver-0.9.7/deps ~/Downloads/tor-browser_en-US/Browser/Downloads/joinmarket-clientserver-0.9.7
~/Downloads/tor-browser_en-US/Browser/Downloads/joinmarket-clientserver-0.9.7
Traceback (most recent call last):
File "/home/username/Downloads/tor-browser_en-US/Browser/Downloads/joinmarket-clientserver-0.9.7/jmvenv/bin/pip", line 5, in <module>
from pip._internal.cli.main import main
File "/home/username/Downloads/tor-browser_en-US/Browser/Downloads/joinmarket-clientserver-0.9.7/jmvenv/lib/python3.8/site-packages/pip/_internal/cli/main.py", line 9, in <module>
from pip._internal.cli.autocompletion import autocomplete
File "/home/username/Downloads/tor-browser_en-US/Browser/Downloads/joinmarket-clientserver-0.9.7/jmvenv/lib/python3.8/site-packages/pip/_internal/cli/autocompletion.py", line 10, in <module>
from pip._internal.cli.main_parser import create_main_parser
File "/home/username/Downloads/tor-browser_en-US/Browser/Downloads/joinmarket-clientserver-0.9.7/jmvenv/lib/python3.8/site-packages/pip/_internal/cli/main_parser.py", line 8, in <module>
from pip._internal.cli import cmdoptions
File "/home/username/Downloads/tor-browser_en-US/Browser/Downloads/joinmarket-clientserver-0.9.7/jmvenv/lib/python3.8/site-packages/pip/_internal/cli/cmdoptions.py", line 23, in <module>
from pip._internal.cli.parser import ConfigOptionParser
File "/home/username/Downloads/tor-browser_en-US/Browser/Downloads/joinmarket-clientserver-0.9.7/jmvenv/lib/python3.8/site-packages/pip/_internal/cli/parser.py", line 12, in <module>
from pip._internal.configuration import Configuration, ConfigurationError
File "/home/username/Downloads/tor-browser_en-US/Browser/Downloads/joinmarket-clientserver-0.9.7/jmvenv/lib/python3.8/site-packages/pip/_internal/configuration.py", line 26, in <module>
from pip._internal.utils.logging import getLogger
File "/home/username/Downloads/tor-browser_en-US/Browser/Downloads/joinmarket-clientserver-0.9.7/jmvenv/lib/python3.8/site-packages/pip/_internal/utils/logging.py", line 27, in <module>
from pip._internal.utils.misc import ensure_dir
File "/home/username/Downloads/tor-browser_en-US/Browser/Downloads/joinmarket-clientserver-0.9.7/jmvenv/lib/python3.8/site-packages/pip/_internal/utils/misc.py", line 39, in <module>
from pip._internal.locations import get_major_minor_version
File "/home/username/Downloads/tor-browser_en-US/Browser/Downloads/joinmarket-clientserver-0.9.7/jmvenv/lib/python3.8/site-packages/pip/_internal/locations/__init__.py", line 14, in <module>
from . import _distutils, _sysconfig
File "/home/username/Downloads/tor-browser_en-US/Browser/Downloads/joinmarket-clientserver-0.9.7/jmvenv/lib/python3.8/site-packages/pip/_internal/locations/_distutils.py", line 9, in <module>
from distutils.cmd import Command as DistutilsCommand
ModuleNotFoundError: No module named 'distutils.cmd'
Joinmarket was not installed. Exiting.
I see, thanks for the report. I got the same error as that trying to install an old Python version myself recently (I tried 3.6 and 3.7 on Ubuntu 20.04). Right now I'm not sure how one fixes that.
So, it doesn't have to do with my Ubuntu release (22.04), I suppose. Should I try installing an older version of JoinMarket?
So, it doesn't have to do with my Ubuntu release (22.04), I suppose.
Well, I'd definitely say it does - on 20.04 you simply won't have this problem. What we have here is an interplay between versions of different things - the operating system, Python and the Qt libraries. But that doesn't mean your OS is somehow 'the wrong one', it's just that they've changed some of the dependency chains there and our Qt install now doesn't seem to work.
Should I try installing an older version of JoinMarket?
I'm afraid I can't see any case where that will help. We've been pinning 5.14.2 of PySide2 for a long time (since late 2020 as per the convo linked above ), and I can't recommend trying to install something older than that (there are multiple ways that will be broken and/or bad, and may well not install on 22.04 either).
Traceback (most recent call last): File "/home/username/Downloads/tor-browser_en-US/Browser/Downloads/joinmarket-clientserver-0.9.7/jmvenv/lib/python3.10/site-packages/qt5reactor/core.py", line 292, in iterate_qt self.iterate(delay=delay, fromqt=True) File "/home/username/Downloads/tor-browser_en-US/Browser/Downloads/joinmarket-clientserver-0.9.7/jmvenv/lib/python3.10/site-packages/qt5reactor/core.py", line 287, in _iterate self.doIteration(delay, fromqt=fromqt) File "/home/username/Downloads/tor-browser_en-US/Browser/Downloads/joinmarket-clientserver-0.9.7/jmvenv/lib/python3.10/site-packages/qt5reactor/core.py", line 306, in doIteration self._timer.setInterval(timeout * 1000) TypeError: setInterval(self, int): argument 1 has unexpected type 'float' ./joinmarket-qt.sh: line 5: 153770 Aborted (core dumped) python3 joinmarket-qt.py
Can confirm having the same error with Python 3.10.
Tried disallowing PySide 5.15.2.*, got 5.13.2 installed instead, but this causes new error (when commenting out try / except for load_program_config() in joinmarket-qt.py:
$ ./scripts/joinmarket-qt.sh
User data location: /home/user/.joinmarket/
2022-09-29 11:29:22,879 [DEBUG] rpc: getblockchaininfo []
Traceback (most recent call last):
File "/home/user/git/joinmarket-clientserver/scripts/joinmarket-qt.py", line 2367, in <module>
load_program_config(config_path=options.datadir)
File "/home/user/git/joinmarket-clientserver/jmclient/jmclient/configure.py", line 763, in load_program_config
global_singleton.bc_interface = get_blockchain_interface_instance(
File "/home/user/git/joinmarket-clientserver/jmclient/jmclient/configure.py", line 898, in get_blockchain_interface_instance
bc_interface = BitcoinCoreInterface(rpc, network,
File "/home/user/git/joinmarket-clientserver/jmclient/jmclient/blockchaininterface.py", line 174, in __init__
blockchainInfo = self._rpc("getblockchaininfo", [])
File "/home/user/git/joinmarket-clientserver/jmclient/jmclient/blockchaininterface.py", line 232, in _rpc
log.debug('rpc: ' + method + " " + str(args))
File "/usr/lib/python3.10/logging/__init__.py", line 1465, in debug
self._log(DEBUG, msg, args, **kwargs)
File "/usr/lib/python3.10/logging/__init__.py", line 1624, in _log
self.handle(record)
File "/usr/lib/python3.10/logging/__init__.py", line 1634, in handle
self.callHandlers(record)
File "/usr/lib/python3.10/logging/__init__.py", line 1696, in callHandlers
hdlr.handle(record)
File "/usr/lib/python3.10/logging/__init__.py", line 968, in handle
self.emit(record)
File "/home/user/git/joinmarket-clientserver/scripts/qtsupport.py", line 201, in emit
if record: XStream.stdout().write('%s\n' % record)
AttributeError: 'NoneType' object has no attribute 'write'
Tried disallowing 5.15.2.* also for PyQt5 and PyQt5-Qt5, but then there is no versions available for Python 3.10:
ERROR: Ignored the following versions that require a different python version: 5.14.0 Requires-Python >=2.7, !=3.0., !=3.1., !=3.2., !=3.3., !=3.4., <3.9; 5.14.1 Requires-Python >=2.7, !=3.0., !=3.1., !=3.2., !=3.3., !=3.4., <3.9; 5.14.2 Requires-Python >=2.7, !=3.0., !=3.1., !=3.2., !=3.3., !=3.4., <3.9; 5.14.2.1 Requires-Python >=2.7, !=3.0., !=3.1., !=3.2., !=3.3., !=3.4., <3.9; 5.14.2.2 Requires-Python >=2.7, !=3.0., !=3.1., !=3.2., !=3.3., !=3.4., <3.9; 5.14.2.3 Requires-Python >=2.7, !=3.0., !=3.1., !=3.2., !=3.3., !=3.4., <3.9; 5.15.0 Requires-Python >=2.7, !=3.0., !=3.1., !=3.2., !=3.3., !=3.4., <3.9; 5.15.1 Requires-Python >=2.7, !=3.0., !=3.1., !=3.2., !=3.3., !=3.4., <3.10; 5.15.2 Requires-Python >=2.7, !=3.0., !=3.1., !=3.2., !=3.3., !=3.4., <3.10 ERROR: Could not find a version that satisfies the requirement PyQt5-Qt5!=5.15.0,!=5.15.1,!=5.15.2.,!=6.0 (from versions: 5.15.2) ERROR: No matching distribution found for PyQt5-Qt5!=5.15.0,!=5.15.1,!=5.15.2.*,!=6.0
With Python 3.9 have no problems, can run joinmarket-qt with current master. So seems we don't support Qt GUI with Python 3.10 for now, workaround is to use older Python version.
@AdamISZ Could we build Linux binary for joinmarket-qt, like we already do for Windows?
@AdamISZ Could we build Linux binary for joinmarket-qt, like we already do for Windows?
We can, and I have done it in the past, but I stopped when I realized that incompatibilities in the linked libraries on different distros regularly caused problems. Note that building a static binary is obviously desirable, but it's surprisingly difficult. We should probably try to use AppImage or something like that, but i only briefly looked into it a couple years back and didn't find an easy way to get it to work. We could start from Electrum's setup (which is what I did for the Windows thing - I set up the wine build process from what I saw from Electrum and maybe Core HWI too), but I was struggling to find the motivation to do this intensive work for Linux since it seemed like very few people would have trouble just starting a script for it instead (like your .sh wrapper), that's why there was a note in the releases for some time 'if there is interest in a Linux binary we may start releasing them again', but literally nobody said anything in response to that.
There seems to be more and more issues regarding Qt, maybe we should look at again. Same applies to macOS.
Also, would be cool to have process documented and have reproducible builds (should not be too hard - just use some VM with same versions of all software involved into building binaries).
I run
./joinmarket-qt.sh
atscripts
to open up JoinMarket, as told in the main page.A "Open Wallet" popup is prompt, and it tells me to enter my wallet name and passphrase. I do it, but then this error appears:
I delete the
.wallet1.jmdat.lock
, re-enter the passphrase and nothing happens. The program just shuts down, a new.wallet1.jmdat.lock
is created, and the console prints these messages:Note that it's my first time that I try JoinMarket, and I'm using the latest release (0.9.7). I've also tested my RPC connection, and it works properly (it doesn't have to do with my full node).