我有一个主执行python文件(F),我想使用其他python 类中的一些服务(S) 文件夹结构是:
root/a/my file to execute -- (F)
root/b/python class I would like to use -- (S)
如何在文件(F)中调用请求的python类(S)?
感谢。
答案 0 :(得分: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
...
答案 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只能是一个空文件,但它可以 还可以执行包的初始化代码或设置全部 变量,稍后描述。