在python中导入第三方包

时间:2017-09-26 09:46:34

标签: python python-3.x

我有第三方包,看起来像这样:

packagename
├── subfolder1
|   ├── Someclass11.py
|   ├── ...
|   └── __init__.py <- EMPTY
├── subfolder2
|   ├── Someclass21.py
|   ├── ...
|   └── __init__.py <- EMPTY
├── Someclass1.py
├── Someclass2.py
├── ...
└── __init__.py

packagename/__init__.py看起来像这样:

from packagename.subfolder1.Someclass11 import Someclass11
from packagename.subfolder2.Someclass21 import Someclass21
from packagename.Someclass1 import Someclass1
from packagename.Someclass2 import Someclass2

我自己的项目有这样的结构:

projectname
├── thirdParty
|   ├── packagename
|   └── ...
├── subfolder2
|   └── ...
├── ...
└── main.py

我想在packagename(以及其他类/函数)中包含来自main.py的类。 如果我将packagename/__init__.py更改为:

,则此方法有效
from projectname.thirdParty.packagename.subfolder1.Someclass11 import Someclass11
from projectname.thirdParty.packagename.subfolder2.Someclass21 import Someclass21
from projectname.thirdParty.packagename.Someclass1 import Someclass1
from projectname.thirdParty.packagename.Someclass2 import Someclass2

是否有导入packagename而不编辑packagename/__init__.py并让其他功能从不同位置导入的解决方案?

1 个答案:

答案 0 :(得分:0)

您必须拥有thirdParty中的PYTHONPATH文件夹。

在Linux / MacOS上:

$ export PYTHONPATH=<path_to_projectname>/thirdParty

在Windows上:  见this answer

设置新python路径的另一种方法是在main.py中添加以下内容,之前导入thirdParty包:

import sys
import os
base_dir = os.path.dirname((os.path.abspath(__file__)))
thirdParty_dir = os.path.join(base_dir, 'thirdParty')
sys.path.insert(0, thirdParty_dir)

尽管这个片段可能依赖于一点版本(我在python 3.5中测试过它)。