Python Matlab Engine Install - python

Ive been trying to install matlab engine for python so I can call matlab functions from within my python scripts.
The guide Im using is this one: http://uk.mathworks.com/help/matlab/matlab_external/install-the-matlab-engine-for-python.html
It says the setup.py file is located in matlabroot\extern\engines\python, however, my extern folder does not contain an engines folder (only examples, include, lib)
Am I looking in the wrong place? Or is there another way to get this installed? Im using matlab 2012b and python 2.7 if that makes a difference

Looking at the release notes for Matlab 2014, the Python engine didn't exist until R2014b, so I don't think you'll be able to use it in 2012.
http://uk.mathworks.com/help/matlab/release-notes.html

Related

How do to use a python script in Unity?

I'm trying to run a face detection model in Unity. It gets input from the webcam, then spits out a face. But trying to make this work with C# has been an absolute nightmare. And despite all my suffering, I still haven't been able to make it work!
If I could use python, I'd be able to get it done easily. So, obviously, I want to find a way to get a python script working in Unity. But IronPython is the only thing I've been able to find, and it's outdated.
I need either knowledge of how to make IronPython work in spite of being outdated, or some other method. Please.
Unfortunately, Unity at this time does not support Python. Although, there is an asset that you can use a bit of Python with. I am not sure what you can do with this asset but I know it could help a minimal amount:https://assetstore.unity.com/packages/tools/integration/python-interpreter-645
Quick Note: Most programming languages work about the same way. If you figure out the documentation and grammar/punctuation for C#/UnityC#, you should be off just fine.
I try to use python once on Unity and I found a few ways:
There is a package call "IronPython" where you can add a python file to your unity project and then call a function from C# to your python code, to do that you should follow this:
We already know that we can use python to use .net internal calls.
Now we may use the same to start a console that can accept a scripting language in Unity engine.
To do this we have to include certain dll files.
These dll files must be present in Assets>plugins
IronPython.dll
IronPython.Modules.dll
Microsoft.Scripting.Core.dll
Microsoft.Scripting.dll
Microsoft.Scripting.Debugging.dll
Microsoft.Scripting.ExtensionAttribute.dll
Microsoft.Dynamic.dll
Once the Plugins are in place.
Initiate the Cs code
PythonEngine engine = new PythonEngine();
engine.LoadAssembly(Assembly.GetAssembly(typeof(GameObject)));
engine.ExecuteFile("Test.py");
Where test.py is the python code.
Initiate python side:
import UnityEngine from UnityEngine
import *
Debug.Log("Hello world from IronPython!")
References:
https://github.com/cesardeazevedo/Unity3D-Python-Editor
http://techartsurvival.blogspot.in/2013/12/embedding-ironpython-in-unity-tech-art.html
IronPython in Unity3D
the issue with this way is that most of the python module are not supported.
2.the second way is to create a file like json that contain the data you want to send to the json and then create an output json that send the output from the python script, this way is very limited with what you can send because the data must be contain in your json.
the last way that work for me is to install the Nuget package and copy the script from python to c# line by line with the relevent module installed in Unity and it's work for me, but copy a long code can take time.
this is a reference to the package:
https://github.com/GlitchEnzo/NuGetForUnity
and then to install the relevent package you should press on NuGet → Manage NuGet Packages and the choose the relevent package(for me it was Numpy and it work grate).
hope it will help you
I don't know how recent it is but there is a Unity package for python available on unity 2019.3 and further versions.
Warning the first versions of this package can't use Python3.
You can see more for yourself by the following link.
https://docs.unity3d.com/Packages/com.unity.scripting.python#2.0/manual/index.html
I hope this may help you.
We are thrilled to announce that Python for Unity 4.0.0-exp.5 is now available!
4.0.0-exp.5 is a major upgrade from our last public release, and incorporates a large number of changes. In summary:
Based on Python 3.7; scripts based on Python 2.7 will need to be ported.
Users no longer need to install Python on their system.
In-process Python is no longer reinitialized when the Unity domain reloads.
Removed the out-of-process API. The PySide example now runs in-process and is much simpler.
Limited support for a virtual environment workflow via the ProjectSettings/requirements.txt file.
Many bug fixes.
Documentation for the Python for Unity package is available here, and the full changelog can be found here.
This is an experimental release, and thus is not visible in Package Manager. To install this package, open Package Manager, click the + at the top left and select Add package by name.... Enter com.unity.scripting.python as the name and and 4.0.0-exp.5 as the version and click Add. Alternatively, you may edit Packages/manifest.json and add "com.unity.scripting.python": "4.0.0-exp.5", to the list of dependencies, or edit the existing entry for Python for Unity to update the version.
Soursce: https://forum.unity.com/threads/python-for-unity-release-announcements.1084688/
Documentation: https://docs.unity3d.com/Packages/com.unity.scripting.python#4.0/manual/index.html
Unity not supported python, But you Can write Python Code and run it by Socket programing, Create Server with python and send data,in C# Connect to server and use data sended with python.

How to distribute C++ application which calls Python?

I know there is some way to call Python from C++, like Python/C API or Boost.Python. My question is, how can I distribute the application? For example, does user still need to install Python and Python packages on their machine?
My user case is: I want to use some Python code from my C++ code. The main application is written in C++. Then I am going to deploy my app. The goal is to make the app self contained, and user don't need to install Python and Python packages at all.
The possible steps may be :
1, calling Python from C++ via Python/C API or boost.Python from source code.
2, bring Python/C libraries together with application.
I hope after these 2 steps, my app will be a self-contained and standalone software. User can just copy the app folder to any other machines which has no Python installed.
Note that due to license issue, I can not use PyInstaller. I also meet some problems when trying to use "Nuitka" to make the Python part self contained. So I am now trying directly calling Python from C++. I know it will run on my developer machine. But needs to confirm that this solution can also make app self-contained and won't ask user to install Python.
Update: Now I feel I need to do something to make my app self-contained if I use Python/C to call python from C++ :
1, I need to bring all needed runtime with my app. (C++ runtime of course, and the python_version.dll)
2, I need to deploy a Python interpreter inside my app. Simply copy the Python folder from Python installation and remove some not needed files (like header files, lib files)
3, use Py_SetPythonHome function to points to the copied Python interpreter inside the app.
I'd say you're on the right track. Basically, you should obtain a Python (shared or static) library, compile your program with it, and of course bundle the Python dependencies you have with your program. The best documentation I've read is available here: https://docs.python.org/3.8/extending/embedding.html#embedding-python-in-another-application. Roughly, the process is:
Get a Python library from python.org and compile with ./configure --enable-shared (I believe omitting --enable-shared does only produce the python binary).
Compile your program. Have it reference the headers under Include and link the library. Note that you can obtain the compiler and linker flags you need as described here.
Call Python code from within your application using e.g. PyRun_SimpleString() or other functions from the C API. Note that you may also depend on the Python standard library (under Lib in the distribution) if there's any functionality you use from it.
If you linked against Python statically, at this point you're done, aside from bundling any Python code you depend on, which I'm not sure is relevant in your case.
I am suffering from the same problem, I had a project which is made up of C++ and python(embedded) and there is a problem of deployment/distribution.
After research, I got a solution which is not perfect (means it will be helpful to run your app in other system)
change visual studio in release mode and compile(you got a folder in your working directory)
install pyinstaller (pip install pyinstaller)
then navigate to pyinstaller folder and command:-pyinstaller.exe "your script_file_path.py"
-it will create a dist folder
copy that folder in working folder where exe exists.
remember.
dist folder and c/python code compiled by same version of python.
now good to go.
it will work.

Python calling Matlab User Function from any directory using matlab module

Background
I'm working with Python 2.7.6 and Matlab 2016a and have installed the official MathWorks Python to Matlab bridge. It is the matlab and matlab.engine modules. All of the other questions I've seen on SO regarding matlab/python use third-party wrappers that seem out of date. I have no experience programming in matlab itself, but plenty of python experience.
I'm currently porting this wrapper code from matlab_wrapper to the matlab module: https://github.com/javiergonzalezh/dpp. matlab_wrapper did not work for me (gave an undefined symbol in the openssl library that installed with matlab 2016a), hence the port to something that does work and will be maintained for future versions of matlab.
Question
This documentation shows how to call user defined functions (.m files) that are in the current directory.
http://www.mathworks.com/help/matlab/matlab_external/call-user-script-and-function-from-python.html
How can I call matlab user functions from any cwd using the matlab module in python? Is there some kind of OS environment $PATH variable or some matlab equivilent? If it helps, the .m files reside in the same directory as the calling python code.
Due to the comment by #excaza, I solved this by setting the MATLABPATH environment variable to point to the folder containing my *.m files.
http://www.mathworks.com/help/matlab/matlab_env/add-folders-to-search-path-upon-startup-on-unix-or-macintosh.html

Using Python in NetBeans 8.1

I'm trying to add Python functionality to NetBeans 8.1. I downloaded Python from the Python website here. (I'm using Windows 10, by the way.) I also downloaded the NetBeans plugins "Python" and "Jython Distribution" (required by the former). Now I have two questions:
1.
When I create a new Python project, I have these options:
Based on the description for the "Setuptools" choice, I'm guessing that I shouldn't use that one since it's not for Windows. So am I correct in choosing "Python Project - Ant"?
2.
The Python platform that is selected by default is "Jython 2.7.0," as shown below.
I'm assuming that what I got from the Python website was a Python platform too, so I'd like to use that if possible. But in trying to add another platform, I don't know what file to choose in my Python folder. All of the ones I've tried result in the error:
I guess I could use the Jython platform, but I would think that the stuff I downloaded straight from Python would be the best. Do I need to add and make default the stuff I downloaded? Or should I ignore that and just use the Jython platform?
If yes to "should I add a platform", what file do I select?
Thanks in advance for any help.
EDIT:
I was able to create and run successfully a Python project using the "Python Project - Ant" option as mentioned in question 1, using the Jython platform. So question 1 is taken care of. I still would like to be able to use the Python platform I downloaded from their website, though, so question 2 still needs an answer.
For those who are trying to run other python distributions from netbeans, here is what i found:
From python wiki - https://wiki.python.org/moin/IntegratedDevelopmentEnvironments
Python/Jython support in NetBeans -- Open source, allows Python and Jython Editing, code-completion, debugger, refactoring, templates, syntax analysis, etc.;
UPDATE: Netbeans 7.0 released without Python support. Check
http://wiki.netbeans.org/Python70Roadmap for upcoming Python support.
So it looks like, python (Cbased) will no longer be suported in NetBeans, only Java-based Jython - also look on this question:
What is the difference between Python vs Jython vs IronPython vs wxPython?

Compiling to a different python version

I have an application written in python 2.7 . In my app I want to give users the ability to compile a python source file (i.e py to pyc).
The builtin compile function does this but the output file is only compatible with python 2.7.
What I want is to compile the file to a range of different python versions (specifically python 2.5 , 2.6 & 2.7 )
I know that one way to approach this problem is re-write my application in each of those versions and just use the inbuilt compile function, but I do not want to do this.
I am open to all suggestions including writing a C extension, embedding python etc...
EDIT
The application which I am writing is a tool which allows to inject/modify arbitrary code inside a pyinstaller exe.
Now you may be knowing that pyinstaller actually puts compiled python source files within the exe.
My app just extracts these embedded pyc files, decompiles them, allows the user to modify them, and then rebuild the exe.
Since the exe can be from a different python version, so I need the functionality to compile the decompiled output to that version.
Here is a screenshot of that app.
I solved my own problem in a different approach.
Now, my main app is written in python 2.7. I wrote 2 dll each of which had a python interpreter embedded. Within one I embedded python 2.6 and within other python 2.5.
Each of these two dlls uses the Python C API to compile a script given as an argument to the respective python version.
Now, from my main app (written in python 2.7) , I used ctypes to call the exported functions from these two dlls. The script to compile was passed as an argument.
Using this approach I was able to compile a given script to any of the 3 python versions.

Categories