【问题标题】:How can I install Python modules programmatically / through a Python script? [duplicate]如何以编程方式/通过 Python 脚本安装 Python 模块? [复制]
【发布时间】:2012-10-09 14:09:18
【问题描述】:

我可以在脚本中严格地从 PyPi 下载和安装 Python 模块,而不使用 shell完全

我使用非标准 Python 环境,即 Autodesk Maya 的 Python 解释器。这不附带“easy_install”,也没有“shell”,只有一个由 Maya 主可执行文件调用的 python 脚本解释器。将 ez_setup.py 的内容复制并粘贴到脚本编辑器窗口并正确运行它会将 easy_install 安装到 Maya 目录的某个位置,但脚本错误地将 Python 解释器记录为“...maya.exe”而不是“...mayapy.exe” " 此外,使用 easy_install 需要一个 shell。

目标是提供一个 Python 脚本,例如,将 NumPy 安装到 Maya Python 系统中。这可以通过将鸡蛋放入站点包目录来完成,但这需要手动用户干预。最终用户必须在 Maya 环境之外执行的任何操作基本上都是不可触碰的,尤其是对文件系统的干扰。但是通过脚本搞乱文件系统?没关系。

还有什么比 ez_setup.py + 编辑生成的 easy_install...py 的 + 子进程调用更优雅的吗?我觉得这是一个基本功能。我在网上看到了通过 pip 安装程序模块的文档...但是需要先安装 pip!

在脚本范围内严格安装模块的最优雅方式是什么?

【问题讨论】:

  • 在运行ez_setup.py 之前将sys.executable 分配给mayapy.exe 的路径是否有效?
  • 谢谢:这修复了ez_setup,但它需要知道mayapy.exe 在哪里。更多路径黑客...
  • 如果您不需要 easy_install 的依赖解析,只需 exec()-ing setup.py 文件即可

标签: python pip distutils easy-install maya


【解决方案1】:

在 Windows 上为 Maya 安装 easy_install。

  1. 下载ez_setup.py
  2. 打开windows cmd提升(开始,输入cmdrmb点击它->以管理员身份运行)
  3. 将 cmd 目录更改为 x:\maya install dir\bin
    • 示例:cd c:\Program Files\MayaXX\bin
  4. 执行以下命令 mayapy x:\WhereYouSaved\ez_setup.py

现在应该正确设置轻松安装。您可能仍需要执行以下步骤:

  1. cd x:\maya install dir\python\scripts
  2. 将此文件夹中的所有文件重命名为以ma开头
    • 示例:for %i in (*) do ren %i ma%i
  3. 将此文件夹添加到您的路径
    • 点击win+e
    • rmb 我的电脑并选择属性
    • 高级系统设置 -> 环境变量
    • 搜索变量路径编辑它并附加;x:\maya install dir\python\scripts

现在你可以从 cmd 调用 ma​​easy_install pythonModule 来安装东西了。您也可以在 Maya 中调用以下命令来安装模块:

from setuptools.command import easy_install
easy_install.main( ["pythonModule"] )

注意:如果 Maya 安装在程序文件中,那么如果不提升,您就无法真正安装东西。除非您将磁盘权限更改为 Maya python 目录。

【讨论】:

  • 谢谢。 easy_install.main() 正是我要找的,因为在 Maya 中执行修改后的 ez_setup.py 也会安装它。
【解决方案2】:
#!/usr/bin/env python

from __future__ import print_function

REQUIREMENTS = [ 'distribute', 'version', 'Cython', 'sortedcollection' ]
try:
    from setuptools import find_packages
    from distutils.core import setup
    from Cython.Distutils import build_ext as cython_build
    import sortedcollection
except:
    import os, pip
    pip_args = [ '-vvv' ]
    proxy = os.environ['http_proxy']
    if proxy:
        pip_args.append('--proxy')
        pip_args.append(proxy)
    pip_args.append('install')
    for req in REQUIREMENTS:
        pip_args.append( req )
    print('Installing requirements: ' + str(REQUIREMENTS))
    pip.main(initial_args = pip_args)

    # do it again
    from setuptools import find_packages
    from distutils.core import setup
    from Cython.Distutils import build_ext as cython_build
    import sortedcollection

【讨论】:

  • 这看起来很有趣。是否尝试导入sortedcollection,如果导入失败,安装包?
  • @DoctorPangloss:是的,正确的。它尝试在 try/catch 块中导入 Cython 和 sortedcollection。当它失败时,它使用 pip 安装REQUIREMENTS 中列出的依赖项。然后它尝试再次导入 cython 和 sortedcollections,这一次应该可以工作。
【解决方案3】:

要使其正常工作,请打开 ez_setup.py 文件并在此行的 http 之后添加一个 s

DEFAULT_URL     = "http://pypi.python.org/packages/%s/s/setuptools/" % sys.version[:3]

这样就变成了

DEFAULT_URL     = "https://pypi.python.org/packages/%s/s/setuptools/" % sys.version[:3]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-22
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    • 1970-01-01
    • 2020-06-11
    相关资源
    最近更新 更多