用python导入python包

时间:2016-01-19 03:58:59

标签: python cmd pip apt-get

所以我希望能够更有弹性地编写我的代码,从我想要处理导入的python的顶部开始。

我希望代码在尚未安装所需软件包的系统上运行。为了达到这个目的,我希望用python在运行中安装软件包。

try:
    import pygame as pg
except(ImportError):
    # [install pygame][1] here
    # Download and run pygame.MSI (windows)
    # apt-get install python-pygame

install pygame 从这个特定的解决方案,我打算做一个更强大的泛型函数 ...

import subprocess as sp
def imp(inP,name,location):
    try:
        exec "import "+inP+" as "+(name if name != "" else "")
    except ImportError:
        try:
            os = ????
            if(os == windows):
                sp.call("pip install "+location,shell=True)
            if(os == unix):
                sp.call("sudo apt-get install python-"+inP,shell=True)
            r = True
        except Exception:
            print colPrt("ERROR installing ") + inP
            r = False
        try:
            exec "import "+inP+" as "+(name if name != "" else "")
        except(ImportError):
            print colPrt("ERROR importing ") + inP
            r = False
    return r

所以我的一个问题变成2.第一个是在运行中安装模块的最佳实践,第二个是unix和windows环境之间的差异。

Ps,colPrt只是将红色文本返回到终端

def colPrt(s):
    return("\x1B["+"31;40m" + str(s) + "\x1B[" + "0m")

感谢您的想法:)

3 个答案:

答案 0 :(得分:3)

  

第一个是在运行中安装模块的最佳实践

我建议不要在运行时安装模块,原因如下:

  1. 用户应该可以选择是否要安装内容。大多数用户都不想在运行时做出这样的选择(并且你的程序不应该运行必要的权限来安装这样的东西)......
  2. 跟进第一点 - 安装软件包时应安装依赖项。
  3. 它会使你真正不想维护的一堆东西混乱你的代码。
  4. 即使您确实包含它,您的代码和网络上某些第三方软件包的最新版本是否兼容?
  5. Python的标准构建系统具有与依赖项交互的方式,因此当您的软件包下载并安装时(例如通过easy_installpip),那么依赖项应该全部附带

    看看here,了解如何打包你的python代码。

答案 1 :(得分:0)

尝试查看pip-accel,它是pip的包装,是跨平台的工作。如果您的用户没有预先安装python环境,我建议您查看virtualenv。 Pip + virtualenv就像一个魅力,你只需编写一个简短的python脚本,它将使用设置来运行它。

无论如何,如果您将使用自己的解决方案,将很难支持,也许有一天您的老板来请求您添加Mac Os支持。最好用pip + virtualenv写封装,而不是自己实现所有逻辑。

答案 2 :(得分:0)

对于异常只写出错误消息并让用户选择安装模块。或者写下它的功能设置(安装)包装。

在unix / linux平台上,python与easy_install一起发布,不要在apt-get的后台安装任何东西。没有权限就不会成功。不用。

我们不仅使用基于Debian的linux :) 例如。我的标准操作系统是基于unix的: QNX :)