我有一个主要执行python文件(F),我想在其中使用其他python类 的一些服务(S),文件夹结构是:
root/a/my file to execute -- (F)
root/b/python class I would like to use -- (S)
如何在我的文件 (F) 中调用请求的 python 类 (S)?
谢谢。
这可能太明显了,但其他答案缺少确保模块b
在您的sys.path
. 因此,假设问题中的文件夹结构并假设该目录b
包含__init__.py
与模块一起调用的文件s.py
,则需要以下咒语:
# Add the b directory to your sys.path
import sys, os
parent_dir = os.getcwd() # find the path to module a
# Then go up one level to the common parent directory
path = os.path.dirname(parent_dir)
# Add the parent to sys.pah
sys.path.append(path)
# Now you can import anything from b.s
from b.s import anything
...
__init__.py
在您希望包含的目录中创建一个文件。
所以让我们想象一下我们有两个目录,一个src
叫做utils
.
如果您Main.py
在src
目录中,并且希望在位于Network
的文件中使用名为的类Connections.py
,utils
那么您可以执行以下操作。
请注意,这同样适用于您创建的任何包含文件的*.py
文件夹。例如,我们可以拥有folder a, b, c
,而您只需这样做from a.b.c import Connections
,或者您的文件名可能是什么......
1)在目录中创建一个__init__.py
文件(它可以简单地为空)utils
,然后从您Main.py
执行以下操作。
from utils import Connections
my_instance = Connections.Network()
#Then use the instance of that class as so.
my_instance.whateverMethodHere()
目录看起来像这样:
root dir
- src
-__init__.py
- Main.py
- utils
-__init__.py
- Connections.py
有关更多详细信息,您可以查看更深入的 python 文档。 http://docs.python.org/tutorial/modules.html#packages
根据上面的链接,有关 python 包的更多信息,以及我们使用的原因__init__.py
:
导入包时,Python 会在 sys.path 上的目录中搜索包子目录。
需要init .py 文件才能使 Python 将目录视为包含包;这样做是为了防止具有通用名称(例如字符串)的目录无意中隐藏了稍后出现在模块搜索路径上的有效模块。在最简单的情况下,init .py 可以只是一个空文件,但它也可以执行包的初始化代码或设置all 变量,稍后将介绍。
做一个这个问题的例子,下面是你当前的目录树:
A folder:
file a.py
file b.py
B folder:
file c.py
file d.py
在 c.py 中,您想将 a.py 导入到您的宏中。然后你可以这样做:
import os
# insert 1, 2, 3... but not 0, 0 is your working directory
sys.path.insert(1, "Folder A 's absolute path")
# Here, you can import module A directly
import a