【问题标题】:Should I be installing my Python modules?我应该安装我的 Python 模块吗?
【发布时间】:2012-05-25 21:22:27
【问题描述】:

我通常不会费心安装 Python 模块。我使用 web2py,然后将它们转储到模块文件夹中并让它处理本地导入。它似乎总是最直接的做事方式——在系统范围级别处理依赖关系从来没有感觉正确,也从来没有感觉要搞乱虚拟环境。

one of my other questions,回答者说

通常,第 3 方模块的最佳做法是安装它们 通过 pip 或 easy_install(最好在 virtualenv 中),如果它们是 在 PyPI 上可用,而不是将它们复制到您的某个地方 蟒蛇路径。 ... [因为] 运行安装脚本挂钩 安装可执行脚本、构建 C 扩展等所必需的, 这不是通过在模块中复制来完成的。

我不完全理解这一点。我一直认为这更像是一种偏好,但安装 3rd 方模块确实是更好的做法吗?不这样做会不会导致问题?使用 web2py 之类的框架有什么不同吗?

【问题讨论】:

  • 就像回答者说的那样,C 扩展不会被构建,任何可执行脚本都不会被安装。一些模块还依赖setup.py 来构建某些模板源文件,尽管这种情况不太常见。如果它破裂,它通常会(但并非总是)立即显而易见。不过,Virtualenvs 确实没有那么多工作要做,而且是处理这个问题的“正确方法”。
  • 如何知道一个模块是否构建了 C 扩展?
  • 我不确定是否有一种很棒的通用方法。您可以在setup.py 中查找Extension 模块,或搜索扩展名不是.py 的文件,看看是否有.c.cpp.cxx.C.h、或任何可能在扩展文件中使用的无数其他扩展。您可能在 Web 项目中使用的大多数通用 Python 包可能都没有,但任何计算密集型的东西都可能有,就像基于与预先存在的库接口的东西一样。
  • Dougal- 谢谢,听起来安全的做法是更多地使用 virtualenvs.. 我会继续的

标签: python web2py python-module


【解决方案1】:

这取决于模块和你想用它做什么。一些软件包附带有用的命令行工具,只有在您正确安装它们时才能使用。

相反,如果您正在编写要分发到您没有太多控制权的环境的代码,您通常必须在项目中本地保留代码副本,例如目标环境可能没有这个包... web 项目通常属于这一类,当然,这取决于您的服务环境。

【讨论】:

  • 当然,带有自定义引导脚本的 virtualenv(编写 requirements.txt 并使用 subprocessafter_install 钩子中将其提供给 virtualenv 的 pip)更可靠地解决了同样的问题,并且正确方式 (tm) 提供的所有美好事物 - 自动化、依赖关系处理、易于升级、不易出现手动错误。它需要一些网络访问权限,但这似乎在网络开发中几乎是给定的;)
  • Google App Engine 或某些共享主机等沙盒环境通常不允许您运行 virtualenv 引导脚本之类的东西。如果可以的话,我同意这是一种很好的工作方式!
  • 谢谢大家- 看来我需要在 virtualenvs 上磨练了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-05
  • 1970-01-01
  • 1970-01-01
  • 2014-04-19
  • 1970-01-01
  • 2021-07-21
  • 2017-09-18
相关资源
最近更新 更多