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

2024-04-26 23:53:54 发布

您现在位置:Python中文网/ 问答频道 /正文

具有以下dir结构

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

是否可以这样做:

^{pr2}$

其中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


Tags: pymodules内容fooinitdefmore错误
3条回答

把@A.Joly和@slallum的答案堆在一起:事实上,我发现他们的方法结合起来确实有效。我创造了这些:

pycharmprojects
   |_networkxy
       |_ main_run.py     misleading name, it's just an ordinary file
       |_ more_module.py
       |_ __init__.py

__init__.py的内容:

^{pr2}$

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

注意:由于某些原因,我不能在__init__.py中执行import main_run,但是{}似乎可以工作。在

事实上,进口是相当棘手的。。。在

您可以执行以下操作:

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

请致电ipython:

^{pr2}$

那么

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

如果要使用内部模块而不显式导入它们,则必须将它们导入__init__.py文件中:

import some_module
import other_module
import sub_package

sub_package/__init__.py中:

^{pr2}$

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

其他选项是在代码中显式导入它们:

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

相关问题 更多 >