Hmm... well, if it really is as simple as tinkering with the PATH env var,
then it should be pretty easy to do from python, since you're calling
mayapy as a subprocess.  One of the kwargs to subprocess.Popen provides the
ability to pass in a dict which is used for the environment for the newly
spawned process - just copy the os.environ, and modify the PATH in the
modified copy.  (Or, you could just modify os.environ['PATH'] directly
before calling subprocess, if you don't mind "globally" altering your
path...)

- Paul

On Wed, Jul 18, 2012 at 12:25 PM, Christian Akesson <[email protected]
> wrote:

> 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
>

-- 
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