我使用的是Python 3.5.1.我在这里阅读了文档和包部分:https://docs.python.org/3/tutorial/modules.html#packages
现在,我有以下结构:
/home/wujek/Playground/a/b/module.py
Run Code Online (Sandbox Code Playgroud)
module.py:
class Foo:
def __init__(self):
print('initializing Foo')
Run Code Online (Sandbox Code Playgroud)
现在,在/home/wujek/Playground:
~/Playground $ python3
>>> import a.b.module
>>> a.b.module.Foo()
initializing Foo
<a.b.module.Foo object at 0x100a8f0b8>
Run Code Online (Sandbox Code Playgroud)
同样,现在在家里,超级文件夹Playground:
~ $ PYTHONPATH=Playground python3
>>> import a.b.module
>>> a.b.module.Foo()
initializing Foo
<a.b.module.Foo object at 0x10a5fee10>
Run Code Online (Sandbox Code Playgroud)
实际上,我可以做各种各样的事情:
~ $ PYTHONPATH=Playground python3
>>> import a
>>> import a.b
>>> import Playground.a.b
Run Code Online (Sandbox Code Playgroud)
为什么这样做?我虽然有被需要的__init__.py文件(空的都可以)两种a,并b为module.py要导入的时候Python的路径指向Playground文件夹?
这似乎已经从Python 2.7改变了:
~ $ PYTHONPATH=Playground …Run Code Online (Sandbox Code Playgroud) Python从一级目录导入模块的正确方法是什么?该目录是一个包含所有这些模块的Python包,我有一个子目录,其中包含需要这些模块的代码.
以下工作正常,但这只是一个黑客.我想要推荐/ pythonic方式.
import sys
sys.path.append("../")
from fruit import Fruit
print("OK")
Run Code Online (Sandbox Code Playgroud)
目录结构:
pkg1
__init__.py
fruit.py
+sub_pkg
__init__.py
recipe.py
Run Code Online (Sandbox Code Playgroud)
fruit.py的内容
class Fruit:
def get_name(self):
print("Fruit name")
Run Code Online (Sandbox Code Playgroud)
sub_pkg/recipe.py..的内容只是一个导入行:
from fruit import Fruit
Run Code Online (Sandbox Code Playgroud)
当我跑:
python recipe.py
Run Code Online (Sandbox Code Playgroud)
它给出了以下错误.
Traceback (most recent call last):
File "recipe.py", line 2, in <module>
from fruit import Fruit
ImportError: No module named fruit
Run Code Online (Sandbox Code Playgroud)
我也试过:from pkg1.fruit import Fruit,不行.还看了其他类似的问题..
python -m recipe.py 或python -m sub_pkg/recipe.py没有奏效.