【问题标题】:Developing and using the same Python on the same computer在同一台计算机上开发和使用相同的 Python
【发布时间】:2011-04-24 06:41:22
【问题描述】:

我正在开发一个 Python 实用程序模块来帮助下载文件、存档等。我在虚拟环境中设置了一个项目以及我的单元测试。当我想在同一台计算机上使用这个模块时(基本上作为“生产”),我将文件移动到 ~/dev/modules/mymodulemymodule 目录/strong>

我将所有第 3 方模块保存在 ~/dev/modules/contrib 下。这个 contrib 路径在我的 PYTHONPATH 上,但 mymodule 不是因为我注意到如果 mymodule 在我的 PYTHONPATH 上,我的单​​元测试无法区分“开发”版本和“生产”版本。但是现在如果我想使用这个通用的实用程序模块,我必须手动将它添加到 PYTHONPATH 中。

这可行,但我确信有更好、更自动化的方法。

在同一台计算机上拥有开发和生产模块的最佳方式是什么?例如,有没有办法动态设置 PYTHONPATH?

【问题讨论】:

  • 你的问题不是很清楚。通用实用程序模块是您开发的吗?如果是这样,您是否想在单元测试后将其移至生产区域并从生产区域使用它来对其他模块进行单元测试?
  • 是的,这是我开发的。我想将其移至 Prod 以用于其他脚本和程序。

标签: python module packaging pythonpath


【解决方案1】:

您可以在sys.path添加/修改python路径,只要确保第一个路径是当前目录".",因为一些第三方模块依赖于从当前模块的目录导入。

关于 python 路径的更多信息: http://djangotricks.blogspot.com/2008/09/note-on-python-paths.html

【讨论】:

【解决方案2】:

我猜虚拟环境是指 virtualenv 包?

http://pypi.python.org/pypi/virtualenv

我会尝试的(如果我没有正确理解问题,请道歉)是:

  • 将源代码保存在 PYTHONPATH 未引用的位置(例如 ~/projects/myproject)
  • 编写一个简单的 setuptools 或 distutils 脚本来安装它(参见Python distutils - does anyone know how to use it?
  • 使用 virtualenv 包通过 --no-site-packages 选项创建开发虚拟环境 - 这样您的“开发”版本将看不到默认 python 安装中安装的任何包。
  • (还要确保您的 PYTHONPATH 没有任何源目录)

然后,进行测试:

  • 激活开发虚拟环境
  • 运行安装脚本(通常类似于 python setup.py build install)。您的包最终位于 /path/to/dev_virtualenv/lib/python2.x/site-packages/
  • 测试、中断、修复、重复

并且,对于生产:

  • 确保 dev virtualenv 未激活
  • 运行安装脚本
  • 一切顺利,“开发”版本隐藏在生产无法看到的虚拟环境中...
  • ...而且 PYTHONPATH 不会(直接)搞砸

也就是说,我写这篇文章的信心是一个实际上没有尝试过在愤怒中使用 virtualenv 设置的人,并希望我已经模糊地理解了你的问题...... ;)

【讨论】:

  • 我确实使用 virtualenv 进行开发,并且我的全局 PYTHONPATH 中没有引用源目录。然而,问题是我的全局 PYTHONPATH 即使在激活的 virtualenv 中也得到维护。因此,如果我的路径中有 Prod 代码,则测试首先会在那里查找(它的目录更浅)。激活 virtualenv 时有没有办法覆盖全局 PYTHONPATH?或者我可以在测试开始时删除 Prod 路径?
  • 如果您的 PYTHONPATH 上只有一个目录,那么您可以在 virtualenv 激活脚本中添加一行,例如“unsetenv PYTHONPATH”,但如果您有多个 virtualenvs 和/或条目PYTHONPATH 可能会有点混乱。您可以将生产版本安装在不需要使用 PYTHONPATH 加载它的地方(从而避免首先设置 PYTHONPATH 的需要),还是您已经这样做了..? (再次,如果我仍然没有得到它,请道歉!)
【解决方案3】:

您可以将PYTHONPATH 设置为指向您的生产代码的全局环境变量,然后在您要使用开发代码的任何shell 中,更改PYTHONPATH 以指向该代码。

(是不是太简单了?我错过了什么吗?)

【讨论】:

  • “全局环境变量”是否意味着简单地为系统设置 PYTHONPATH?您能否提供一个示例,说明如何在 Python 代码中设置路径(而不是添加路径)?
  • @Wraith:回复。 “全局环境变量”:是的,完全正确。回覆。 “在 Python 代码中设置路径”:Python 路径在 sys.path 中作为一个普通的旧 Python 列表 - 您可以随意操作它(对于当前 Python 会话)。
猜你喜欢
  • 1970-01-01
  • 2020-06-26
  • 1970-01-01
  • 1970-01-01
  • 2019-02-07
  • 1970-01-01
  • 2019-03-11
  • 1970-01-01
  • 2020-04-24
相关资源
最近更新 更多