2

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

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

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

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

4

3 回答 3

1

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

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

于 2010-10-12T13:58:10.513 回答
1

我猜虚拟环境是指 virtualenv 包?

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

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

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

然后,进行测试:

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

并且,对于生产:

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

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

于 2010-10-12T13:24:01.753 回答
0

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

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

于 2010-10-12T11:54:44.180 回答