0

我有一个主要执行python文件(F),我想在其中使用其他python 的一些服务(S),文件夹结构是:

root/a/my file to execute -- (F)
root/b/python class I would like to use -- (S)

如何在我的文件 (F) 中调用请求的 python 类 (S)?

谢谢。

4

3 回答 3

2

这可能太明显了,但其他答案缺少确保模块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
...
于 2013-01-28T17:12:40.857 回答
1

__init__.py在您希望包含的目录中创建一个文件。

所以让我们想象一下我们有两个目录,一个src叫做utils.

如果您Main.pysrc目录中,并且希望在位于Network的文件中使用名为的类Connections.pyutils那么您可以执行以下操作。

请注意,这同样适用于您创建的任何包含文件的*.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 变量,稍后将介绍。

于 2013-01-28T16:49:16.813 回答
1

做一个这个问题的例子,下面是你当前的目录树:

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
于 2020-03-05T03:48:50.357 回答