2010-10-12 75 views
1

我正在开发一个Python实用程序模块以帮助进行文件下载,归档等。我有一个项目与我的单元测试一起在虚拟环境中设置。当我想用这个模块在同一台计算机(基本上为“生产”),我将文件移动到MyModule的目录中的〜的/ dev /模块/ mymodule中在同一台计算机上开发和使用相同的Python

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

这有效,但我相信有更好,更自动的方式。

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

+0

你的问题不是很清楚。常见的实用程序模块是您开发的东西吗?如果是这样,那么你是否想在单元测试之后将其移入生产区域,并将其从生产区域用于其他模块的单元测试? – sateesh 2010-10-12 12:07:07

+0

是的,这是我开发的东西。我想将它移到Prod以供其他脚本和程序使用。 – 2010-10-13 11:54:01

回答

1

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

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

+0

谢谢你的帮助。我在这里http://stackoverflow.com/questions/3947464发布了一个后续问题,因为我无法使用你的建议。 – 2010-10-16 02:45:40

0

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

(那是过于简单化了?我错过了什么?)

+0

“全局环境变量”是否意味着简单地为系统设置PYTHONPATH?您能否提供一个如何在Python代码中设置路径(而不是仅仅添加到路径中)的示例? – 2010-10-12 12:41:31

+1

@Wraith:Re。 “全球环境变量”:是的,确切的。回覆。 “在Python代码中设置路径”:Python路径作为一个普通的旧Python列表在'sys.path'中 - 不管您喜欢(用于当前Python会话),您都可以操作它。 – RichieHindle 2010-10-12 12:44:19

1

我被虚拟环境中猜测你的意思是的virtualenv包?

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

我想尝试(和道歉,如果我没有理解正确的问题)是什么:

  • 保持源的地方,不被PYTHONPATH(如〜/引用项目/ MyProject的)
  • 编写一个简单的setuptools或distutils的脚本安装它(见Python distutils - does anyone know how to use it?
  • 使用的virtualenv包来创建与--no-site-packages中选择一个开发虚拟环境 - 这娃您的“开发”版本将不会看到安装在默认python安装中的任何软件包。
  • (还要确保您的PYTHONPATH没有任何源目录)

然后,来进行测试:

  • 激活dev的虚拟环境
  • 运行安装脚本(通常是一些像python setup.py build安装)。你的软件包最终会在/ path/to/dev_virtualenv/lib/python2中。X /站点包/
  • 测试,休息,修复,重复

而且,对于生产:

  • 确保开发的virtualenv未激活
  • 运行安装脚本
  • 所有的好去,“开发”版本隐藏在生产看不到的虚拟环境...
  • ...并没有(直接)搞乱PYTHONPATH

这就是说,我写这篇文章与谁实际上没有尝试过在愤怒使用的virtualenv设定一个人的信心和希望,我隐约明白你的问题...;)

+0

我使用virtualenv进行开发,并且在我的全局PYTHONPATH中没有引用源代码目录。但问题是,即使在激活的virtualenv中,我的全局PYTHONPATH也会保留。所以如果我在我的路径中有Prod代码,测试首先会在那里看到(它的目录更浅)。激活virtualenv时有没有办法覆盖全局PYTHONPATH?或者,也许我可以在测试开始时删除Prod路径? – 2010-10-13 11:53:12

+1

如果你只有PYTHONPATH上的一个目录,那么你可以在virtualenv激活脚本中添加一行,比如“unsetenv PYTHONPATH”,但是如果你在PYTHONPATH上有几个virtualenvs和/或条目可能会有点混乱。你能否在你不需要使用PYTHONPATH加载它的地方安装你的生产版本(从而避免首先设置PYTHONPATH),或者你是否已经这么做了。? (再次,道歉,如果我还没有得到它!) – FredL 2010-10-13 12:29:04

相关问题