0

setup_tools、easy_install、tinydb をすべて mayas python インタープリター内からダウンロードしてインストールしたいと思います。

以下のコードの setup() を確認してください。

私はかなり近いですが、ez-setup.py を実行するシステム コマンドが easy_install パッケージを mayas の site_packages ディレクトリにダウンロードしていないようです。同じコマンドがシェルで完全に機能するため、これは奇妙です..

したがって、システム コールは次のようになります: /Applications/Autodesk/maya2016/Maya.app/Contents/bin/mayapy /Users/paxtongerrish/downloads/ez_setup.py

私はez_setup.pyでmayas pythonインタープリターを指しています

このコマンドをシェルに入力すると、setup_tools が mayas python site_packages ディレクトリにダウンロードされます... :D

ただし..これをすべてmayas pythonインタープリター内から実行する必要があり、os.systemまたはsubprocess.callから呼び出されたときに機能しません

ありがとう!import os import sys import urllib2 import サブプロセス

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([maya_py, file_path], shell=True, stdout=subprocess.PIPE)
    print '--->>'
    p.wait()
    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))
4

0 に答える 0