English 中文(简体)
Python - 从子文件夹进行绝对导入
原标题:
  • 时间:2009-01-21 00:10:47
  •  标签:

基本上,我正在问与这个人相同的问题:如何在Python中进行相对导入?

但没有人给他正确的答案。假设你在一个子文件夹中,你想要进入到另一个子文件夹前要回到上一级目录,按照他们的建议做是不起作用的(正如楼主在评论中指出的那样)。

我知道你可以通过使用sys.path来做到这一点,但我更喜欢更干净的方法。

例子:

App
__init__.py
Package_A
--__init__.py
--Module_A.py
Package_B
--__init__.py
--Module_B.py

我如何将 Module_A 导入到 Module_B 中?

最佳回答
main.py
setup.py
app/ ->
    __init__.py
    package_a/ ->
       __init__.py
       module_a.py
    package_b/ ->
       __init__.py
       module_b.py
  1. You run python main.py.
  2. main.py does: import app.package_a.module_a
  3. module_a.py does import app.package_b.module_b

另外还可以使用2或3: from app.package_a import module_a

只要您的PYTHONPATH中有app,这就可以运行。然后,main.py可以在任何地方。

所以您需要编写一个setup.py文件,将整个应用程序包及其子包复制(安装)到目标系统的Python文件夹,以及main.py文件到目标系统的脚本文件夹中。

问题回答

如果我正确地阅读了Python 2.5或更高版本的文档:

from ..Module_B import Module_B

I thought I was well-versed in Python but I had no idea that was possible in version 2.5.

If you are then importing Module_B in to App, you would

Module_B.py: import ModuleA

App.py (which also imports ModuleA which is now by default in your Pythonpath)

import Module_B.Module_B

Another alternative, is to update __init__.py (the one in Module_A/App folder) to:

import os
import sys
sys.path.extend( %s../  % os.getcwd())
import ModuleA

Another alternative, is to add your folder to the PYTHONPATH environment var.





相关问题
热门标签