That was it, again, thanks Paul. Tested with the nuke (copy every dll from
maya to the compiled program's directory).
http://msdn.microsoft.com/en-us/library/7d83bc18(v=vs.71).aspx  - dll
search order in windows.

Seems to me that the simplest method is the last bullet -  The directories
listed in the PATH environment variable.

The PATH environment variable is not the same as doing
sys.path.append(path)?
The C:\Program Files\Autodesk\Maya2012\bin is already appended to
sys.path....

I will get to this later this afternoon, but if anyone have experience with
DLL path resolution and particularly the windows PATH environment variable,
I would love to hear about it. Is there a way to set that temporarily for
the process through Python?

Thanks

/Christian


On Wed, Jul 18, 2012 at 11:45 AM, Christian Akesson <[email protected]
> wrote:

> Tried that out right quick:
>   File
> "W:/Tools/SOEglobal/python/SOEmayaTools/soe_mayaBatch/commandNodes/export.py",
> line 6, in <module>
>   from maya.OpenMaya import 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.
>
> I will look into dynamic-library-path-resolution on windows. Thanks for
> your reply.
>
> /Christian
>
>
>
> On Wed, Jul 18, 2012 at 11:34 AM, Paul Molodowitch <[email protected]>wrote:
>
>> 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
>>
>
>

-- 
view archives: http://groups.google.com/group/python_inside_maya
change your subscription settings: 
http://groups.google.com/group/python_inside_maya/subscribe

Reply via email to