【问题标题】:Absolute imports and managing both a "live" and "development" version of a package绝对导入和管理包的“实时”和“开发”版本
【发布时间】:2014-05-13 20:40:54
【问题描述】:

由于我有限的大脑经过大量阅读后才明白,相对进口不好,绝对进口好。我的问题是,如何有效地管理包的“实时”和“开发”版本?也就是说,如果我使用绝对导入,我的实时代码和开发代码将看到相同的内容。

示例

/admin/project1/__init__.py
               /scripts/__init__.py
                       /main1.py
                       /main2.py
               /modules/__init__.py
                       /helper1.py

在我的 PYTHONPATH 上使用“/admin”,project1 的内容都使用绝对导入。例如:

ma​​in1.py

import project1.modules.helper1

但我想将 project1 的内容复制到另一个位置,并使用该副本进行开发和测试。因为一切都是绝对的,并且因为“/admin”在 PYTHONPATH 上,所以我复制的版本仍然会引用实时代码。我可以将我的新位置添加到 PYTHONPATH,并手动更改所有文件的名称(即在所有内容的末尾添加“dev”),进行更改/工作,然后当我准备好上线时,再次,手动从所有内容中删除“dev”。这会起作用,但很麻烦并且容易出错。

肯定有更好的方法来处理 Python 项目的“实时”和“开发”版本。

【问题讨论】:

    标签: python debugging testing project-management python-2.6


    【解决方案1】:

    你想使用virtualenv(或类似的东西)。

    $ virtualenv mydev
    $ source mydev/bin/activate
    

    这会在 mydev 目录中创建一个本地 Python 安装,并修改几个关键环境变量以使用 mydev 而不是默认的 Python 目录。 现在,您的PYTHONPATH 首先在mydev 中查找任何导入,并且您安装的任何内容(使用pip、setup.py 等)都将进入mydev。使用完mydev 虚拟环境后,运行

    $ deactivate
    

    将您的PYTHONPATH 恢复到之前的值。 mydev 仍然存在,因此您以后可以随时重新激活它。

    【讨论】:

      【解决方案2】:

      @chepner 的 virtualenv 建议是一个很好的建议。另一种选择,假设你的项目没有作为 python egg 安装在机器上,只是将你的开发路径添加到 PYTHONPATH 的前面。 Python 会在常规项目之前找到您的开发项目 1,每个人都很高兴。 Eggs 会破坏乐趣,因为它们往往会在 PYTHONPATH 路径之前得到解决。

      【讨论】:

        猜你喜欢
        • 2017-12-13
        • 1970-01-01
        • 2016-07-19
        • 1970-01-01
        • 2011-06-27
        • 1970-01-01
        • 2021-09-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多