所以我希望能够更有弹性地编写我的代码,从我想要处理导入的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")
感谢您的想法:)
答案 0 :(得分:3)
第一个是在运行中安装模块的最佳实践
我建议不要在运行时安装模块,原因如下:
Python的标准构建系统具有与依赖项交互的方式,因此当您的软件包下载并安装时(例如通过easy_install
或pip
),那么依赖项应该全部附带
看看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 :)