python导入根文件夹并使用所有子文件夹

时间:2017-09-15 13:28:10

标签: python import

使用以下目录结构

.
├── setup.py
└── yourpackage
    ├── __init__.py
    ├── some_module.py
    ├── other_module.py
    └── sub_package
        ├── __init__.py
        └── more_modules.py

是否可以这样做:

>> import yourpackage as yp
>> yp.some_module.bar()
>> yp.sub_package.more_modules.foo()

some_module的内容为

def bar(): print('bar')

more_modules的内容为

def foo(): print('foo')

我似乎无法让这个工作

编辑:我在第一种情况下会得到的错误是

Traceback (most recent call last):
  File "<string>", line 1, in <module>
AttributeError: module 'yourpackage' has no attribute 'some_module'

在第二种情况下,这是一个类似的错误,但more_modules

3 个答案:

答案 0 :(得分:1)

如果您想使用内部模块而不明确导入它们,则必须在DATA work.dm_chg_bal; SET tmp_bal_chg; FORMAT dt2 date9.; acct_id2 = LAG1(acct_id); app_suf2 = LAG1(app_suf); dt2 = LAG1(start_dt); RUN; 文件中导入它们:

__init__.py

import some_module import other_module import sub_package

sub_package/__init__.py

请注意,这可能会使模块的第一次导入变慢。

其他选项是在您的代码中明确导入它们:

import more_modules

答案 1 :(得分:0)

实际上进口非常棘手......

你可以这样做:

import yourpackage as yp
from yourpackage import some_module  #yp does not work

在ipython中调用:

In [8]: yp.some_module.bar()
bar

然后

import yourpackage.sub_package
from yourpackage.sub_package import more_modules

在ipython中调用:

In [20]: yp.sub_package.more_modules.foo()
foo

你必须导入顶级包然后子包......

这是一个有趣的链接:https://www.codementor.io/sheena/python-path-virtualenv-import-for-beginners-du107r3o1

还有这个:):https://docs.python.org/2/tutorial/modules.html

答案 2 :(得分:0)

总结@ A.Joly和@slallum的答案:实际上,我发现他们的方法组合实际上有效。我创造了这些:

DECLARE
    variable_name VARCHAR2(200);
BEGIN

    SELECT col_name
    INTO variable_name
    FROM your_tab
    WHERE specific_column = value;

-- rest

EXCEPTION
    WHEN NO_DATA_FOUND THEN ...
    WHEN TOO_MANY_ROWS THEN ...

END;

pycharmprojects |_networkxy |_ main_run.py ---- misleading name, it's just an ordinary file |_ more_module.py |_ __init__.py 的内容:

__init__.py

from . import main_run from . import more_module 的内容:

main_run.py

def some_module(): print('some module') 的内容:

more_module.py

现在,在目录def more_module(): print('more module') ,在命令行中:

pycharmprojects

注意:由于某些原因,我无法在(C:\Users\Name\.conda\envs\my_root) C:\Users\Name\PycharmProjects>python Python 3.6.0 |Anaconda custom (64-bit)| (default, Dec 23 2016, 11:57:41) [MSC v.1900 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import networkxy >>> networkxy.main_run.some_module() some module >>> networkxy.more_module.more_module() more module import main_run,但__init__.py似乎有用。