使用__init__.py导入Python而不是添加到sys.path

时间:2015-07-22 14:07:40

标签: python

这是我的文件结构。

/working dir
    __init__.py
    main.py
    /packages
        __init__.py
        snafu.py
        /subfolder1
            __init__.py
            foo.py
        /subfolder2
            __init__.py
            bar.py
        /many_more
            ...

如果我运行main.py,我会尝试导入from subfolder1.foo import something 但是foo.py会尝试import subfolder2,因为找不到subfolder2而无效。

要进入每个文件并将每个import语句更改为from packages.a_subfolder.whatever import something

,这将是太多的工作

我已将/packages添加到sys.path,但我不想这样做。有没有办法使用__init__.py文件解决这个问题?

是否会在/ packages __ init __。py 文件中添加import *

many_more /文件夹是我下载的第三方软件包,因为我在不同的计算机上工作,而不是在我工作的每台计算机上安装软件包,只使用文件夹中的软件包。 例如:要在程序中使用googledrive,您需要大约10个不同的软件包才能使其正常工作。

2 个答案:

答案 0 :(得分:0)

在您的情况下,您似乎想要导入父模具中存在的模块。 在要从中导入模块的文件中的以下代码应该可以工作:

import sys
sys.path.append('.')
sys.path.append('..')

答案 1 :(得分:0)

所以看起来唯一有效的方法就是添加

import sys, os
packagepath = os.getcwd() + '/packages'
sys.path.append(packagepath)

到/ packages __init__.py文件并使用它来调用它 from packages.subfolder1.foo import something