Hello! I am still getting familiar with blender's backend. In all other coding I do with python, I use IPython <http://ipython.org/index.html>, which allows me to log all input and output, issue bash commands quickly and simply, query docstrings and sourcecode of functions within the interpreter and use a robust tab completion. I have been searching for a way to integrate blender and ipython for about a week now and running into many roadblocks. I hope it's alright that I am emailing you all about it, as (from my queries to forums) this seems like a feature that many people want, and I believe that it could catalyze 3rd party blender development in a big way by making coding with blender much easier to learn.
I understand that an identical venture<http://pythonide.blogspot.com/2009/03/resumable-ipython-inside-blender_31.html>has found success in 2009 in integrating ipython with blender, however this solution no longer works. Perhaps there is a way of tweaking it to work, but I'm afraid I do not understand what is happening well enough to know where to begin. I have tried a couple other approaches: First, I attempted to use the internal blender console to embed IPython. I append my standard python3 sys.path to the internal blender sys.path, then I do: import IPython IPython.embed() and I get the following traceback: >>> npath = ['', ... '/usr/bin', ... '/usr/lib/python3.3', ... '/usr/lib/python3.3/plat-x86_64-linux-gnu', ... '/usr/lib/python3.3/lib-dynload', ... '/usr/local/lib/python3.3/dist-packages', ... '/usr/lib/python3/dist-packages', ... '/usr/lib/python3/dist-packages/IPython/extensions'] >>> import sys >>> for p in npath: ... sys.path.append(p) ... >>> import IPython >>> IPython.embed() Traceback (most recent call last): File "<blender_console>", line 1, in <module> File "/usr/lib/python3/dist-packages/IPython/frontend/terminal/embed.py", line 282, in embed _embedded_shell = InteractiveShellEmbed(**kwargs) File "/usr/lib/python3/dist-packages/IPython/frontend/terminal/embed.py", line 97, in __init__ display_banner=display_banner File "/usr/lib/python3/dist-packages/IPython/frontend/terminal/interactiveshell.py", line 360, in __init__ user_module=user_module, custom_exceptions=custom_exceptions File "/usr/lib/python3/dist-packages/IPython/core/interactiveshell.py", line 455, in __init__ self.init_readline() File "/usr/lib/python3/dist-packages/IPython/core/interactiveshell.py", line 1844, in init_readline self.refill_readline_hist() File "/usr/lib/python3/dist-packages/IPython/core/interactiveshell.py", line 1853, in refill_readline_hist stdin_encoding = sys.stdin.encoding or "utf-8" AttributeError: 'NoneType' object has no attribute 'encoding' I have tried to use the -d option which (according to the blender man pages) should ensure that sys.stdin is not set to None, however, in both 2.66 and 2.68a sys.stdin evaluates to None even with this option set. My other route of action has been to use the terminal I am running blender from as the interpreter using `blender --python-console`. Unfortunately, this option results in a blank window and when I attempt to embed IPython I get the following traceback: >>> import IPython >>> IPython.embed() --------------------------------------------------------------------------- KeyError Traceback (most recent call last) /usr/lib/python3.3/code.py in runcode(self, code) 88 """ 89 try: ---> 90 exec(code, self.locals) 91 except SystemExit: 92 raise <console> in <module>() /usr/lib/python3/dist-packages/IPython/frontend/terminal/embed.py in embed(**kwargs) 281 if _embedded_shell is None: 282 _embedded_shell = InteractiveShellEmbed(**kwargs) --> 283 _embedded_shell(header=header, stack_depth=2) /usr/lib/python3/dist-packages/IPython/frontend/terminal/embed.py in __call__(self, header, local_ns, module, dummy, stack_depth, global_ns) 155 # Call the embedding code with a stack depth of 1 so it can skip over 156 # our call and get the original caller's namespaces. --> 157 self.mainloop(local_ns, module, stack_depth=stack_depth, global_ns=global_ns) 158 159 self.banner2 = self.old_banner2 /usr/lib/python3/dist-packages/IPython/frontend/terminal/embed.py in mainloop(self, local_ns, module, stack_depth, display_banner, global_ns) 202 if module is None: 203 global_ns = call_frame.f_globals --> 204 module = sys.modules[global_ns['__name__']] 205 206 # Save original namespace and module so we can restore them after KeyError: '__console__' I am using Linux Mint 15, IPython 3.3.1, blender 2.66 and 2.68a (getting the same results in all cases with both versions of blender). Thank you very much :) ~Gabriel
_______________________________________________ Bf-python mailing list [email protected] http://lists.blender.org/mailman/listinfo/bf-python
