Open hellohornet opened 4 years ago
Thanks for reporting this @hellohornet. Can you confirm whether this work in Maya less than 2020 (experimental)? I suspect there's some issue there, as I know they are also in the process of upgrading their Python distribution. It should work just find in both 2 and 3, and has been for years.
1.
I've seen same error when using python2.7 -m pyblish_qml --demo (tested in both CentOS7 &
Ubuntu 18.04.3 LTS)
Traceback (most recent call last):
File "/usr/lib64/python2.7/runpy.py", line 162, in _run_module_as_main
"main", fname, loader, pkg_name)
File "/usr/lib64/python2.7/runpy.py", line 72, in _run_code
exec code in run_globals
File "/usr/lib/python2.7/site-packages/pyblish_qml/main.py", line 6, in
PyQt5 built manually and tested OK
2. In Maya2019.2 (CentOS 7): pyblish_qml.show() returns "no module named site"
I've got the same error by running the demo with Python 2.7.15 on macOS and CentOS 7. Works great with Python 3 but it doesn't seem to be working in Nuke 10.5/11/12 either...
> python -m pyblish_qml --demo
Traceback (most recent call last):
File "/mill3d/server/apps/PYTHON/el7-x86-64/python-2.7.15/lib/python2.7/runpy.py", line 174, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "/mill3d/server/apps/PYTHON/el7-x86-64/python-2.7.15/lib/python2.7/runpy.py", line 72, in _run_code
exec code in run_globals
File "/mill3d/users/jeremyr/dev/pyblish-qml/pyblish_qml/__main__.py", line 6, in <module>
from . import app
File "pyblish_qml/app.py", line 12, in <module>
from . import util, compat, control, settings, ipc
File "pyblish_qml/control.py", line 380
yield result
SyntaxError: 'return' with argument inside generator
Were using environment variable PYBLISH_QML_PYTHON_EXECUTABLE
for using newer version of Python is an option to you ?
This issue was because of PRs #350 and #349, for fixing #333 which was using Python 3.7, where PEP 479 has been enabled.
If you guys could change to use newer version of Python would be great, but if not, should we mantain a branch for Python 27 ?
Was looking at the code, it seems that pyblish-qml
was actually not relying on generator to stop by itself, but check on the type of the result instead, see this line.
So replacing those return
statement inside generator with yield
may solved this issue.
Has a quick test with Python 3.7 and it's working just fine, but I cannot test against Python 2.7 since that would require to build PyQt5>=5.7.1
manually, because the latest python-qt5
was only 5.3
.
Anyone could help verifying this on Python 2.7 ? 👇
replacing those
return
statement inside generator withyield
may solved this issue
This issue was because of PRs ... where PEP 479 has been enabled.
Aaah, yes of course.
Ok, so workarounds:
So replacing those return statement inside generator with yield may solved this issue.
The return
, much like raise
is supposed to stop the iterator. A yield
would carry on with the next line. Worst case, we'll need to refactor it into a if this: yield else do_nothing()
-type thing. If we can't stop execution.
I can't figure out how we're supposed to do it. :S We can't return
, and we can't raise
.
Not sure I'm getting this discussion, but to stop an iterator means to just do return
right? As long as you don't pass any arguments:
def custom_iterator(value):
if value == "a":
yield 1
yield 2
yield 3
return
yield 0
for x in custom_iterator("a"):
print(x)
# 1
# 2
# 3
for x in custom_iterator("b"):
print(x)
# 0
SyntaxError: 'return' with argument inside generator
This just means you're returning with an argument, which is invalid inside an iterator. To yield one last value before you return the way to do it is:
yield last_value
return
Or to raise
an error without returning/yielding if all you want is just to raise an error.
Or am I stating something obvious and am I missing the point?
This just means you're returning with an argument, which is invalid inside an iterator. To yield one last value before you return the way to do it is:
yield last_value return
Yeah, that could work in both Python 2.7 and Python 3.7.
Anyway, the minimum fix (less code) for this issue was to replace those return ...
with yield ...
, because we actually don't need that iterator to stop by itself (return or raise any error), it already will be stopped from the outside here.
And it was not only stopping the iterator, but also prompting the message of why it stopped from the iterator, like due to the failed validation or stopped by user.
Hi,
I wanted to use Pyblish with a combination of Windows 10 and Maya2018, but there has error.
> C:\Python27\python.exe -m pip install python-qt5
> set PYBLISH_QML_PYTHON_EXECUTABLE=C:\Python27\python.exe
> set PYBLISH_QML_PYQT5=C:\Python27\Lib\site-packages\PyQt5
> C:\Python27\python.exe -m pip install pyblish-qml
> C:\Python27\python.exe -m pip install pyblish-maya
> C:\Python27\python.exe -m pyblish_qml --demo
Traceback (most recent call last):
File "C:\Python27\lib\runpy.py", line 174, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "C:\Python27\lib\runpy.py", line 72, in _run_code
exec code in run_globals
File "C:\Python27\lib\site-packages\pyblish_qml\__main__.py", line 6, in <module>
from . import app
File "C:\Python27\lib\site-packages\pyblish_qml\app.py", line 12, in <module>
from . import util, compat, control, settings, ipc
File "C:\Python27\lib\site-packages\pyblish_qml\control.py", line 380
yield result
SyntaxError: 'return' with argument inside generator
Then, I found this article about a similar problem. and I replaced the return in control.py with yield as specified in this link, but the result was the same. https://github.com/pyblish/pyblish-qml/blob/e0a9015cdaa0e664b1a8f39995eb8bc1c3ca2cf9/pyblish_qml/control.py#L1029
Next, I replaced all returns in control.py with yield. This time, the Window appeared for a moment, but quickly disappeared and there was another error.
Starting pyblish-qml server..
Using Python @ 'C:\Python27\python.exe'
Using PyQt5 @ 'C:\Python27\Lib\site-packages\PyQt5'
Targets: default
Starting pyblish-qml
Done, don't forget to call `show()`
Settings:
HeartbeatInterval = 60
WindowTitle = Pyblish
WindowPosition = [100, 100]
WindowSize = [430, 600]
ContextLabel = Context
HiddenSections = [u'Collect']
Awaited statemachine for 0.00 ms
TypeError: unable to convert a Python 'generator' object to a C++ 'bool' instance
Could you give me some advice about this?
My advice would be https://github.com/pyblish/pyblish-qml/issues/353#issuecomment-584095064
NOTE The version of Python you use with QML is independent of the version Maya uses.
Whenever I run
pyblish_qml.show()
either from maya orpython2 -m pyblish_qml --demo
I successfully load the QML server, then am met withIt is my understanding that this is behavior that works in python3 but not 2.7, which is a necessity for Maya. Do I need to check out a different branch for 2.7 support ?