2013-03-09 26 views
2

问题:如何系统地探测解释器随时涉及的文件(如在调试模式下)。我如何系统地确定Python在其可访问的包/模块树中的依赖关系?

当一切都失败时,我会收到错误消息。我所要求的是相反的:一切都有效,但我不知道我有多少多余的垃圾,尽管我可以想象像pynotify这样的东西可能可以追踪它。

语境:

我花了整个上午都在行使审判&错误要获得软件包的工作。我确定我已经将相关的python软件包复制到至少3个目录中,并用垃圾将我的windows setx -m path弄糟。现在我想知道如何在没有任何依赖的情况下清理它,并且实际上从过程中学习。

我不可能是唯一一个想知道这件事的人。一些有才华的测试,开发人员必须编写了一个脚本/包:

import everything from everywhere 
check for all dependencies 
E = list(errorMessages) 
L = list_of_stuff_that_was_used 
print L 
print E 

所以,如果我有东西存放这是不是在L,我可以将其删除。但是,当然探测必须彻底,以消耗所有可访问的文件(或至少积极使用的目录)。

问题是什么不是约: 我对sys.path什么是不感兴趣。这是微不足道的。

更多的上下文:

我从The Hitchhikers Guide to Packaging这个问题的未来被不客气知道,但它不探讨了过去。因此,从Python 2xx到3xx的转换,这个问题必须变得越来越相关?

回答

3

python的动态特性使其成为不可能完成的任务。例如,

函数也可以导入。你打算在所有模块中运行所有代码吗?

然后有后向兼容性测试;导入pysqlite2如果sqlite3不存在,使用反向移植模块如果collections.Counter不存在于Python等的当前版本有平台特定的模块(os.pathposixpathntpath(相同的代码但重命名)或者riscospath取决于当前平台)以及整个销售进口到主模块(posix,nt,os2,和riscos都可以由os模块使用,具体取决于平台提供的功能)。

使用setuptools的软件包声明它们的依赖关系,可通过pkg_resources库发现。这是可合理发现的限制。

+0

Thanks Martijn;我认为引导虚拟环境到一个临时目录监控与pynotify可以做的伎俩(?),但如果你认为这条路线注定要失败,那么我甚至不会尝试。 – 2013-03-09 11:33:53

+0

@BHM:任何pip-installable包都会声明它的依赖关系,所以只需使用'pkg_resources'和朋友即可。任何你需要手动安装的东西,好吧,你已经知道它是依赖关系了,不是吗? :-) – 2013-03-09 11:52:40

+0

明白了:-)谢谢。 – 2013-03-09 12:09:55