Python 嵌套模块
Python Nesting Modules
我花了很多时间研究这个,但仍然不明白为什么我一直收到 ImportErrors: No module named ...
我的文件结构如下:
/Package
/mode
__init__.py
moduletoimport.py
/test
__init__.py
abc.py
文件 moduletoimport.py
包含:
class ClassToImport(object):
def test(self):
return True
文件 abc.py
包含以下代码:
from mode.moduletoimport import ClassToImport
我从终端输入:
python abc.py
此处的目的是导入目录上的模块。
快速修复
此问题的快速解决方法是,在文件 abc.py
中将以下内容添加到文件顶部:
import sys
import os
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..')))
但是,这确实不正确。我对您构建项目的方式有一些严重的疑问,相信下面的部分会有很大帮助。
更好的解决方案
一般来说,如果您正在设计要导入的模块,您希望您的项目结构看起来像这样:
package_name/
/* setup.py and other misc files */
package_name/
__init__.py
/* module files go here */
test/
/* tests go here */
顶层package_name/
真的只是用来做项目的。它将包含您的 setup.py
,可能还有配置内容等。
在顶层之下,我们有另一个名为 package_name
的目录。这是您所有实际 python 代码的位置。
同样在顶层之下,我们还有另一个名为 test
的目录。这是所有测试应该去的地方。我会强烈考虑使用 nose 来测试您的 python 应用程序。
例子
让我们构建一个您要完成的快速示例。最终产品将具有以下 structure/files:
my_project/
my_project/
__init__.py
my_class.py
test/
test_my_class.py
my_class.py
的内容是:
class MyClass(object):
def test(self):
return True
test_my_class.py
的内容是:
import unittest
from my_project.my_class import MyClass
class TestMyClass(unittest.TestCase):
def test_my_class(self):
c = MyClass()
self.assertEqual(c.test(), True)
现在,如果您 install nose 您应该能够(从项目的顶层)运行 nosetests
。
关于如何执行此操作的教程有很多。但为了简洁起见,我将让您自己进行一些搜索。
希望对您有所帮助。
我花了很多时间研究这个,但仍然不明白为什么我一直收到 ImportErrors: No module named ...
我的文件结构如下:
/Package
/mode
__init__.py
moduletoimport.py
/test
__init__.py
abc.py
文件 moduletoimport.py
包含:
class ClassToImport(object):
def test(self):
return True
文件 abc.py
包含以下代码:
from mode.moduletoimport import ClassToImport
我从终端输入:
python abc.py
此处的目的是导入目录上的模块。
快速修复
此问题的快速解决方法是,在文件 abc.py
中将以下内容添加到文件顶部:
import sys
import os
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..')))
但是,这确实不正确。我对您构建项目的方式有一些严重的疑问,相信下面的部分会有很大帮助。
更好的解决方案
一般来说,如果您正在设计要导入的模块,您希望您的项目结构看起来像这样:
package_name/
/* setup.py and other misc files */
package_name/
__init__.py
/* module files go here */
test/
/* tests go here */
顶层package_name/
真的只是用来做项目的。它将包含您的 setup.py
,可能还有配置内容等。
在顶层之下,我们有另一个名为 package_name
的目录。这是您所有实际 python 代码的位置。
同样在顶层之下,我们还有另一个名为 test
的目录。这是所有测试应该去的地方。我会强烈考虑使用 nose 来测试您的 python 应用程序。
例子
让我们构建一个您要完成的快速示例。最终产品将具有以下 structure/files:
my_project/
my_project/
__init__.py
my_class.py
test/
test_my_class.py
my_class.py
的内容是:
class MyClass(object):
def test(self):
return True
test_my_class.py
的内容是:
import unittest
from my_project.my_class import MyClass
class TestMyClass(unittest.TestCase):
def test_my_class(self):
c = MyClass()
self.assertEqual(c.test(), True)
现在,如果您 install nose 您应该能够(从项目的顶层)运行 nosetests
。
关于如何执行此操作的教程有很多。但为了简洁起见,我将让您自己进行一些搜索。
希望对您有所帮助。