如何调用Python中其他目录中的类

时间:2013-01-28 16:44:22

标签: python class

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

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

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

感谢。

3 个答案:

答案 0 :(得分:2)

这可能太明显了,但其他答案缺少确保模块bsys.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
...

答案 1 :(得分:1)

以这个问题为例,以下是您当前的目录树:

SELECT
  ABC.PRODUCT_ID,

sum(CASE WHEN DEF.SERVICE_FLG = 'N' THEN DEF.COMP_US_NET_PRICE_AMT ELSE 0 END),
  Sum(CASE WHEN DEF.SERVICE_FLG = 'N' THEN DEF.COMP_US_LIST_PRICE_AMT ELSE 0 END),
  Sum(CASE WHEN DEF.SERVICE_FLG = 'N' THEN DEF.COMP_US_COST_AMT ELSE 0 END),
  Sum(CASE WHEN DEF.SERVICE_FLG = 'N' THEN DEF.EXTENDED_QTY ELSE 0 END)
,
  GHI.FISCAL_YEAR_NUMBER_INT,
   GHI.JKL,
  MNO.GU_PRIMARY_NAME
FROM
  ABC,
  DEF,
  GHI,
  MNO
WHERE
  ( DEF.FISCAL_YEAR_QUARTER_NUMBER_INT=GHI.FISCAL_YEAR_QUARTER_NUMBER_INT  )
  AND  ( ABC.ITEM_KEY=DEF.PRODUCT_KEY  )
  AND  ( DEF.END_CUSTOMER_KEY=MNO.END_CUSTOMER_KEY  )
  AND  ( DEF.PRODUCT_KEY  IN  ( SELECT ITEM_KEY FROM ABC H    JOIN PQR S    ON H.TECHNOLOGY_GROUP_ID = S.TECHNOLOGY_GROUP_ID      WHERE user_id=@Variable('BOUSER') AND IAM_LEVEL_NUM=1   )  )
  AND  ( DEF.DV_ATTRIBUTION_CD IN ('ATTRIBUTED','STANDALONE')  )
  AND  
  (
   ABC.BUSINESS_UNIT_ID  IN  ( 'xyz'  )
   AND
   DEF.REVENUE_RECOGNITION_FLG  IN  ( 'Y'  )
  )
GROUP BY
  1, 
  6, 
  7, 
  8

enter code here

在c.py中,您想要将a.py导入您的宏。然后,您可以执行以下操作:

A folder:
  file a.py
  file b.py
B folder:
  file c.py
  file d.py

答案 2 :(得分:0)

在您要包含的目录中创建一个__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查找package子目录。

     

需要 init .py文件才能让Python对待   目录包含包;这是为了防止   无意中具有通用名称的目录,例如string   隐藏稍后在模块搜索路径上发生的有效模块。在   最简单的情况是, init .py只能是一个空文件,但它可以   还可以执行包的初始化代码或设置全部   变量,稍后描述。