1

我对 Python 很陌生,所以听起来很明显,但我在其他任何地方都没有发现

假设我在目录 A/ 中有一个应用程序(模块),然后我开始在另一个目录 B/ 中开发一个应用程序/模块

所以现在我有

source/
      |_A/
      |_B/

从 BI 想要使用的函数是在 B 中定义的类。我最终可能会将它们拉出来并将它们放在“misc”或“util”模块中。

无论如何,添加到 PYTHONPATH 模块 B 以便 A 可以看到它的最佳方法是什么?考虑到我还将对 B 进行更改。

到目前为止,我想出了类似的东西:

def setup_paths():
   import sys
   sys.path.append('../B')

当我想在 A 中开发使用 B 的东西时,但这感觉不对。

4

3 回答 3

3

通常,当您开发单个应用程序时,您的目录结构将类似于

src/
   |-myapp/
          |-pkg_a/
                 |-__init__.py
                 |-foo.py
          |-pkg_b/
                 |-__init__.py
                 |-bar.py
   |-myapp.py

这使您的整个项目可以被其他人重用为一个包。在myapp.py你通常会有一个简短的main功能。

您可以轻松导入应用程序的其他模块。例如,在pkg_b/bar.py你可能有

import myapp.pkg_a.foo

我认为这是组织进口的首选方式。

如果你真的想要,你可以进行相对导入,它们在PEP-328中有描述。

import ..pkg_a.foo

但我个人认为,它们有点丑陋且难以维护(当然,这是有争议的)。

当然,如果您的一个模块需要来自另一个应用程序的模块,那就完全不同了,因为这个应用程序是一个外部依赖项,您必须处理它。

于 2013-06-07T09:38:32.423 回答
0

我建议使用该imp模块

import imp
imp.load_source('module','../B/module.py')

否则使用从根开始的绝对路径

def setup_paths():
   import sys
   sys.path.append('/path/to/B')
于 2013-06-07T09:35:42.020 回答
0

将正确的文件夹添加到 PYTHONPATH

首先,为您创建的包创建根目录。让我们称之为project。的子目录project是您的应用程序,即AB。现在您必须添加 to 的父project目录PYTHONPATH

引用包内的模块。

假设你other_app.py在 B 中,所以A/app_name.py你像这样导入它:

from project.B.other_app import *

或者,如果您想在other_app命名空间中导入所有符号,如下所示:

from project.B import other_app

创建启动器和动态更改 PYTHONPATH 的好方法

如果您想为 Python 创建通用应用程序启动器,即使您将包移动到其他 PC/dir 也可以工作,您需要一些解决方案来将包父目录动态添加到PYTHONPATH. 这是我对这种情况的解决方案(对于 Linux,但如果你谷歌一下,你也可以将简单的脚本翻译成 Windows :))

在您创建projectcreate的同一文件夹中pwd_to_pythonpath.sh,简短的 bash 脚本:

#!/bin/bash

export PYTHONPATH=$PYTHONPATH:`pwd`

然后为您的 A 和 B 创建启动器,例如A.sh

#!/bin/bash

source pwd_to_pythonpath.sh

python -m project.A.app_name

app_name应该与文件夹中的模块文件名相同(Aapp_name.py这种情况下)

于 2013-06-07T09:42:55.700 回答