easy_install from Maya's python interpreter

281 views
Skip to first unread message

Paxton

unread,
Jan 20, 2016, 4:05:08 PM1/20/16
to Python Programming for Autodesk Maya


Hey Folks, 

I am trying to download and install setup_tools, easy_install and tinydb all from within mayas python interpreter..

I'm pretty close, but it looks like the system command to run ez-setup.py is not downloading the easy_install packages to mayas site_packages directory, which is strange because the same command works perfectly in the shell..

So the system call reads like this: /Applications/Autodesk/maya2016/Maya.app/Contents/bin/mayapy /Users/paxtongerrish/downloads/ez_setup.py

I am pointing mayas python interpreter at ez_setup.py

When i punch this command into the shell, it downloads setup_tools to mayas python site_packages directory... Great! :D

However.. I need to have this all happen from inside mayas python interpreter and it does not work when called from os.system or subprocess.call

Any help super appreciated..

thanks!


import os
import sys
import urllib2
import subprocess

setup_tools_address = 'https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py'
downloads_directory = '%s/downloads' % os.getenv('HOME')

if not os.path.exists(downloads_directory):
os.makedirs(downloads_directory)

def setup():
url = setup_tools_address
file_path = '%s/%s' % (downloads_directory, url.split('/')[-1])
maya_py = maya_py_path()
for p in download_url(url, file_path):
print p
system_command = '%s %s' % (maya_py, file_path)
print '----- sys command--- (only works in shell)------\n'
print system_command
print '\n----------------------------------------------\n'
#This system command works from shell, but not from python.... Maybe superuser thing??
#os.system(system_command)
#sub process doesnt work either

p = subprocess.Popen(system_command, shell=True, stdout=subprocess.PIPE)
for i in p.stdout.readline():
sys.stdout.flush()
print i
add_eggs()
from setuptools.command import easy_install
easy_install.main(['tinydb'])
add_eggs()
import tinydb

def download_url(url, file_path, block_size=2056):
request = urllib2.urlopen(url)
file_size = int(request.info()['Content-Length'])
if not file_path:
file_path = '%s/%s' % (os.getenv('HOME'), url.split("/")[-1])
downloaded_chunk = 0
with open(file_path, "wb") as f:
while downloaded_chunk < file_size:
chunk = request.read(block_size)
downloaded_chunk += len(chunk)
f.write(chunk)
progress = float(downloaded_chunk) / file_size * 100
yield progress
print("\nDownload Complete.")

def maya_app_path():
appName = 'Maya'
if sys.platform == 'win32':
appName = 'Maya.exe'
for p in sys.path:
app_path = '%s/%s' % (p.replace('\\','/') , appName)
if os.path.exists(app_path):
return app_path

def maya_py_path():
file_name = 'mayapy'
if sys.platform == 'win32':
file_name = 'mayapy.exe'
return '%s\\%s' % (os.path.dirname(maya_app_path().replace('/','\\')), file_name.replace('/','\\'))
return '%s/bin/%s' % (os.path.dirname(os.path.dirname(maya_app_path())), file_name)

def get_site_packages_directory():
for p in sys.path:
if p.endswith('site-packages'):
return p

def add_eggs():
site_packages_directory = get_site_packages_directory()
for item in os.listdir(site_packages_directory):
if item.endswith('.egg'):
sys.path.append('%s/%s' % (site_packages_directory, item))

Marcus Ottosson

unread,
Jan 20, 2016, 4:39:22 PM1/20/16
to python_in...@googlegroups.com

Whatever you do from the system Python, simply do it from mayapy. There should be a binary within your Maya installation directory called that, at least that’s how it is on Windows and Linux; I’m not sure about OSX.

For example.

# From OS Python
$ python my_script.py

# From Mayapy
$ /dir/to/mayapy my_script.py

--
You received this message because you are subscribed to the Google Groups "Python Programming for Autodesk Maya" group.
To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_m...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/d3ff77b4-2cad-4f2f-b9a7-ad23be2fd604%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.



--
Marcus Ottosson
konstr...@gmail.com

Justin Israel

unread,
Jan 20, 2016, 5:05:19 PM1/20/16
to python_in...@googlegroups.com
Could you not just use the code from within ez_setup.py directly within maya, as opposed to running a subprocess? Or if you really want to run a subprocess, can you just avoid all that path searching and building, and just use "sys.executable" to run the ez_setup?

Paxton

unread,
Jan 21, 2016, 12:26:17 AM1/21/16
to Python Programming for Autodesk Maya
Hey Justin, yes!, a modified version of ez_setup.py did the trick.
although, unfortunately It seems that you need to force an "insecure" downloader to get easy_install to work without using system calls.
Here's what I changed inside ez_setup.py:
downloaders = (
#download_file_powershell,
#download_file_curl,
#download_file_wget,
download_file_insecure,
)
Still... pretty cool that i can give someone a .py file and it will download dependencies automatically all from within Maya.
That said.. I was on a mac while setting this up, and I have noticed that windows is a bit more strict when in comes to write access to the maya site-packages directory
To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_maya+unsub...@googlegroups.com.
--
Marcus Ottosson
konstr...@gmail.com

--
You received this message because you are subscribed to the Google Groups "Python Programming for Autodesk Maya" group.
To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_maya+unsub...@googlegroups.com.

Justin Israel

unread,
Jan 21, 2016, 12:31:48 AM1/21/16
to Python Programming for Autodesk Maya

To be honest, I really don't feel anything should get installed into Maya's internal site-packages. It should be another path that is added to Maya's PYTHONPATH, or maybe a Maya module, I which case you could write to your module location maybe? Maya at least puts modules onto its PYTHONPATH if I remember correctly.


To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_m...@googlegroups.com.



--
Marcus Ottosson
konstr...@gmail.com

--
You received this message because you are subscribed to the Google Groups "Python Programming for Autodesk Maya" group.
To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_m...@googlegroups.com.

--
You received this message because you are subscribed to the Google Groups "Python Programming for Autodesk Maya" group.
To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_m...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/f9529258-9f99-4e3c-988d-459950103c9b%40googlegroups.com.
Message has been deleted
Message has been deleted

Paxton

unread,
Jan 21, 2016, 1:44:47 AM1/21/16
to Python Programming for Autodesk Maya
I totally agree, but expecting small animation studios to learn the intricacies of easy_install and pip in the context of Mayas python interpreter is not realistic (in my experience). 
Are there any other options for distributing tools (with dependencies)  that don't involve programmers on the receiving end?

Justin Israel

unread,
Jan 21, 2016, 3:01:45 AM1/21/16
to Python Programming for Autodesk Maya

So,  what about Maya modules, which are meant to be distributed packages of code?
Another option, what about distributing your tools with vendored dependencies bundled in? What if a given studio doesn't have an internet connection on the same machines as their production workstations?


--
You received this message because you are subscribed to the Google Groups "Python Programming for Autodesk Maya" group.
To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_m...@googlegroups.com.

Fredrik Averpil

unread,
Jan 21, 2016, 3:09:17 AM1/21/16
to Python Programming for Autodesk Maya
I'm late to the party and have probably misunderstood what's going on totally... but...

I'd create a virtual environment outside of Maya, pip install into it and then inside of Maya I would make the virtualenv's site-packages available. This would leave the Maya installation intact.

Is there a reason why you wouldn't want to go down such a route?
Do you need to use modules which needs to be compiled during pip install?

Cheers,
Fredrik


Robert White

unread,
Jan 21, 2016, 9:16:23 AM1/21/16
to Python Programming for Autodesk Maya
So maya doesn't play to nicely with virtualenv, has to do with how it packages the standard lib into a zip-file.
Now you can transfer pure python libraries from a standard python install's virtualenv, and then just place that onto maya's pythonpath.

So I use a version of pip that I've installed to my local maya environment, then I integrate them into our development and distribution setup myself. Artists then use our deployed packages on their local machines, and for that we piggy back on maya's module system.

I've also built my own local versions of Python that match maya's python build environment, at least on windows. So I've got copies of 2.7 build against VS2010 (Maya2014), and VS2012 (Maya2015/6). This has helped me when compiling extension modules for python such as the P4API and PySide/PyQt ect...
To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_maya+unsub...@googlegroups.com.

--
You received this message because you are subscribed to the Google Groups "Python Programming for Autodesk Maya" group.
To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_maya+unsub...@googlegroups.com.

Marcus Ottosson

unread,
Jan 21, 2016, 9:21:54 AM1/21/16
to python_in...@googlegroups.com

I’ve also built my own local versions of Python that match maya’s python build environment, at least on windows. So I’ve got copies of 2.7 build against VS2010 (Maya2014), and VS2012 (Maya2015/6). This has helped me when compiling extension modules for python such as the P4API and PySide/PyQt ect…

I’m curious, how come you compiled your own Python here, and didn’t use mayapy? I’ve compiled packages with it before and can’t recall having any issues with it.


To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_m...@googlegroups.com.

--
You received this message because you are subscribed to the Google Groups "Python Programming for Autodesk Maya" group.
To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_m...@googlegroups.com.

--
You received this message because you are subscribed to the Google Groups "Python Programming for Autodesk Maya" group.
To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_m...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/e03977f9-db99-4b2b-accb-7f511cd7d3b3%40googlegroups.com.

For more options, visit https://groups.google.com/d/optout.



--
Marcus Ottosson
konstr...@gmail.com

Robert White

unread,
Jan 21, 2016, 10:06:20 AM1/21/16
to Python Programming for Autodesk Maya
So I've not had any issues really using mayapy to handle compilation either. I was doing the custom build to potentially use it as a base for a CI/build system where I could avoid installing maya itself. Never did get a chance to finish the project, other issues came up and it keeps getting stuck in the middle of my queue.

As to how,  I found this walkthrough awhile back, and adapted the process to work with VS2012.
To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_maya+unsub...@googlegroups.com.

--
You received this message because you are subscribed to the Google Groups "Python Programming for Autodesk Maya" group.
To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_maya+unsub...@googlegroups.com.

--
You received this message because you are subscribed to the Google Groups "Python Programming for Autodesk Maya" group.
To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_maya+unsub...@googlegroups.com.



--
Marcus Ottosson
konstr...@gmail.com

Message has been deleted

Paxton

unread,
Jan 21, 2016, 11:57:34 AM1/21/16
to Python Programming for Autodesk Maya

Yea, I suppose on second thought, installing to site-packages is a bad idea.. 
that said, when I use the "--to-dir" arg for  ez_setup.py (and point it to a different path)

command = [get_maya_py_path(), ez_setup.__file__,'--to-dir',  extensions_directory]
p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

I still get permissions errors for mayas "site-packages" directory.
shouldn't that override the default site-packages path?
strange..

-Paxton

On Wednesday, 20 January 2016 13:05:08 UTC-8, Paxton wrote:

Marcus Ottosson

unread,
Jan 21, 2016, 12:03:29 PM1/21/16
to python_in...@googlegroups.com
You can't write to a system directory as a user without elevated permissions. The same happens when you try and paste a file there via Explorer. You'll need to run the console as administrator. Or change the permission of the Maya directory, or install Maya in a user-writable location.

--
You received this message because you are subscribed to the Google Groups "Python Programming for Autodesk Maya" group.
To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_m...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/dfdf2b10-5412-4269-b348-cd2e8b93afb5%40googlegroups.com.

For more options, visit https://groups.google.com/d/optout.



--
Marcus Ottosson
konstr...@gmail.com

Message has been deleted
Message has been deleted

Paxton

unread,
Jan 21, 2016, 12:42:26 PM1/21/16
to Python Programming for Autodesk Maya
Marcus,
Right. but what i'm saying is that I am specifying a non-system directory C:\Users\USER\MyScripts\MYPACKAGE\extensions with '--to-dir' 
but it still errors out saying i cant write  to C:\Program Files\Autodesk\MAYAVERSION\Python\Lib\site-packages
even though i have specified a different directory...
it seems to use the directory specified to download the zip archive, but then it procedes to install to site-pacckages anyway.
Is there a better way of pointing ez_install to a specific directory?

here is the error i get:

The following error occurred while trying to add or remove files in the
installation directory:

    [Errno 13] Permission denied: 'C:\\Program Files\\Autodesk\\Maya2016\\Python\\Lib\\site-packages\\test-easy-install-10980.write-test'

The installation directory you specified (via --install-dir, --prefix, or
the distutils default setting) was:

    C:\Program Files\Autodesk\Maya2016\Python\Lib\site-packages\

Fredrik, to answer your question
"
Is there a reason why you wouldn't want to go down such a route?"

I am, perhaps foolheartedly trying to build packages that can download their own latest versions as well as dependencies.

On Wednesday, 20 January 2016 13:05:08 UTC-8, Paxton wrote:

Marcus Ottosson

unread,
Jan 21, 2016, 12:43:28 PM1/21/16
to python_in...@googlegroups.com

With pip there is --target which installs to a given location. Not sure if there’s an equivalent for ez_install.

ps. Not sure why your sending so many duplicate emails, but they each seem slightly different than the last. Perhaps you are attempting to edit a post on Google Groups? Just a heads up that that won’t work with a mailing list as each reply get’s send to everyone who’s subscribed immediately.


On 21 January 2016 at 17:27, Paxton <paxton...@gmail.com> wrote:
Marcus,
Right. but what i'm saying is that I am specifying a non-system directory C:\Users\USER\MyScripts\MYPACKAGE\extensions with '--to-dir' 
but it still errors out saying i cant write  to C:\Program Files\Autodesk\MAYAVERSION\Python\Lib\site-packages
even though i have specified a different directory...
it seems to use the directory specified to download the zip archive, but then it procedes to install to site-pacckages anyway.
Is there a better way of pointing ez_install to a specific directory?

Fredrik, to answer your question
"
Is there a reason why you wouldn't want to go down such a route?"

I am, perhaps foolheartedly trying to build packages that can download their own latest versions as well as dependencies.


On Wednesday, 20 January 2016 13:05:08 UTC-8, Paxton wrote:

--
You received this message because you are subscribed to the Google Groups "Python Programming for Autodesk Maya" group.
To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_m...@googlegroups.com.

For more options, visit https://groups.google.com/d/optout.



--
Marcus Ottosson
konstr...@gmail.com

Paxton Gerrish

unread,
Jan 21, 2016, 1:00:46 PM1/21/16
to python_in...@googlegroups.com
Yea i was tryin to edit post. Yeesh. Sorry of the spam everyone
You received this message because you are subscribed to a topic in the Google Groups "Python Programming for Autodesk Maya" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/python_inside_maya/ZAqqRUI7Q4w/unsubscribe.
To unsubscribe from this group and all its topics, send an email to python_inside_m...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/CAFRtmOBhS%2BqXuPSr4VXeNSejFdBGBikmfKZ%3DnfCjQDK6180%3D8A%40mail.gmail.com.

For more options, visit https://groups.google.com/d/optout.


--
-Paxton

Reply all
Reply to author
Forward
0 new messages