It looks like some sort of dll linking error - for whatever reason, when run inside of your app, it looks like it can't find the standard maya dlls.
Try this - instead of doing "from pymel.core import *", just try "from maya.OpenMaya import MGlobal". Does that work? If not, you need to look into the specific details of dynamic-library-path-resolution on windows, and figure out how to get it to find the maya dlls. I don't really know much about those details on windows, but I know that on linux, executables can add paths onto the list of paths to search for dynamic libs, and those paths may be inherited (or even override) the paths for other libraries it loads - perhaps something similar exists on windows? - Paul On Wed, Jul 18, 2012 at 11:06 AM, Christian Akesson <[email protected] > wrote: > I should also add that the way the batch start module (CA_batcher.py in > the UI) is called from the compiled application is the below: > > def mayaBatch(self): > """ Kick off the batch sessions""" > # Verify call > if self.verifyMayaBatchInputs(): > self.updateXMLForMayaBatch() > commandPath = soe_path.Path(self.mayaBatchStartUp) > sys.path.append(os.path.split(commandPath)[0]) > fp, pathname, description = imp.find_module(commandPath.namebase) > imp.load_module(commandPath.namebase, fp, pathname, description) > > /Christian > > > > On Wed, Jul 18, 2012 at 11:03 AM, Christian Akesson < > [email protected]> wrote: > >> Hi Justin, thanks for your reply. >> >> Yes, I am packing into a standalone app, using GUI2EXE and py2exe. The >> setup script is attached. The only thing I do special in the setup is the >> below portion, which pretty much adds the environment I have in Eclipse to >> the system paths (surely the formatting will get shredded): >> >> import xml.etree.ElementTree as ET >> import getpass >> import sys >> from os import path >> remoteTBLoc = '//Sdlux3/Projects2/StudioArt/SOEglobal' >> if path.exists("%s/data/%s/SOEG.xml" % (remoteTBLoc, getpass.getuser())): >> userXML = ET.parse('%s/data/%s/SOEG.xml' % (remoteTBLoc, >> getpass.getuser())) >> userXMLCore = userXML.getiterator('Core')[0] >> SOEGUprojectToolPath = userXMLCore.get('SOEprojectToolPath') >> sys.path.append('%s/python/SOEcommon' % SOEGUprojectToolPath) >> from core import soeg >> soeg.SOEG().loadSysPaths(artBuild=0) >> else: >> print 'ERROR - SOEG needs to be installed' >> >> >> I am confused about one thing. If you look at the ui image attached in >> the original post, the actions listed are python modules, that lives in the >> Actions Directory package (see ui image). This is dynamically displayed, >> and none of them are included in the compiled program. When I run, for >> simplicity's sake a single action, the batch starter (see ui) is called. >> >> In this case, the CA_batcher.py, will for each file that is listed in the >> Files & Folder tab kick off a subprocess: >> for eachFile in treatFiles: >> mayaProcess = subprocess.Popen([mayaPyPath, action, eachFile]) >> mayaProcess.wait() >> >> So a subprocess is created calling mayapy.exe with the action (export) >> module being called. I was under the impression that when you call from >> pymel.core import * in a mayapy.exe session that your environment was being >> initialized and that seems to happen when I run this program the exact same >> way inside Eclipse. >> >> When that failed, I tried to initialize the environment manually in the >> action (export) module, but nothing seems to get the from pymel.core import >> * to go. >> >> i.e nothing pymel or Maya is being used inside the compiled program >> itself. The only time that is being used is when the subprocess is created >> to the external action. >> >> Could there be some dependency somewhere within the program itself that >> causes the subprocess to look inside the compiled exe for pymel? I've >> combed for that, but not been able to find anything. >> >> Thanks for having a look, I'm hoping that I am missing something... >> >> /Christian Akesson >> >> >> >> On Wed, Jul 18, 2012 at 8:23 AM, Justin Israel <[email protected]>wrote: >> >>> What are you "compiling" with? Do you mean that you are packaging it >>> into a standalone app with something like py2exe or pyinstaller? If so, >>> what does your setup file look like? Its most likely related to missing >>> dependencies. When you package libraries that have some substantial .dll >>> deps it can be a bit of an extra process to specify them so they are >>> included. >>> Pygame apparently has this same situation, where py2exe will list a >>> special "recipe" section for it on the wiki. >>> >>> >>> >>> >>> On Jul 17, 2012, at 11:19 PM, Christian Akesson <[email protected]> >>> wrote: >>> >>> I've written a standalone compiled Python & PyQt program. It is a >>> framework for all things batching, where separate modules can be written >>> outside of the main program and then gets read by the main program. >>> >>> One of the things I set it up to do is doing batch jobs with Maya. When >>> developing it in Eclipse, I ran a Python 2.6.4 interpreter (x64) - same as >>> Maya 2012 x64 is running on from what I have gathered. Everything works >>> like a charm inside Eclipse. I compile the program and the moment I run the >>> batch code. which uses mayapy.exe ( >>> http://download.autodesk.com/global/docs/maya2012/en_us/PyMel/standalone.html) >>> in a subprocess, I get this error spew: >>> >>> Traceback (most recent call last): >>> File >>> "W:/Tools/SOEglobal/python/SOEmayaTools/soe_mayaBatch/commandNodes/export.py", >>> line 6, in <module> >>> from pymel.core import * #@UnusedWildImport >>> File "C:\Program >>> Files\Autodesk\Maya2012\Python\lib\site-packages\pymel\core\__init__.py", >>> line 6, in <module> >>> import pymel.versions as _versions >>> File "C:\Program >>> Files\Autodesk\Maya2012\Python\lib\site-packages\pymel\versions.py", line >>> 12, in <module> >>> from maya.OpenMaya import MGlobal as _MGlobal >>> File >>> "c:\buildforge\Maya_2012_Win64_Build\build\wrk\optim\runTime\Python\Lib\site-packages\maya\OpenMaya.py", >>> line 7, in <module> >>> ImportError: DLL load failed: The specified procedure could not be found. >>> >>> If I remove the from pymel.core import * from that module (export.py), >>> it will go into our library and start running the batch. The problem is >>> that we have deeply integrated pymel, so whenever it hits that call in our >>> other modules, I get that same error. >>> >>> I've sys.path.append-ed our entire environment manually to make sure >>> it's not an environment thing. I've printed out which python version, bit >>> depth that is being run in both the main program as well as in the mayapy >>> subprocess and they are the same. >>> >>> Does anyone have any clue to what could be going on here? >>> Running Maya 2012 service pack 2 and PyMel 1.0.3 >>> >>> The fact that it runs like a charm when running inside of eclipse has >>> got to be a clue and is really frustrating at the same time :-). >>> >>> <image.png> >>> >>> >>> >>> /Christian >>> >>> -- >>> view archives: http://groups.google.com/group/python_inside_maya >>> change your subscription settings: >>> http://groups.google.com/group/python_inside_maya/subscribe >>> >>> -- >>> view archives: http://groups.google.com/group/python_inside_maya >>> change your subscription settings: >>> http://groups.google.com/group/python_inside_maya/subscribe >>> >> >> > -- > view archives: http://groups.google.com/group/python_inside_maya > change your subscription settings: > http://groups.google.com/group/python_inside_maya/subscribe > -- view archives: http://groups.google.com/group/python_inside_maya change your subscription settings: http://groups.google.com/group/python_inside_maya/subscribe
