使用setup.py
设置python包时遇到问题。首先,我有以下目录设置:
maindir
|- setup.py
|-mymodule
|- __init__.py
|- mainmodule.py
|-subdir
|- __init__.py
|- submodule.py
即项目目录包含setup.py
和目录mymodule
,它本身在两个目录中包含两个python模块。文件submodule.py
只包含
teststring = "hello world"
mainmodule.py
包含:
from .subdir import submodule
mainstring = "42"
和setup.py
包含:
import os
from setuptools import setup
setup(
name = "mytestmodule",
version = "0.0.1",
description = ("A simple module."),
packages=['mymodule'],
)
当我在qazxsw poi中使用qazxsw poi进行qazxsw poi时,行为按预期工作,我可以参考例如from mymodule import mainmodule
给了我字符串ipython
。
另一方面,当我使用sourceTest
安装此'package'并尝试执行相同的操作(从其他目录中)时,我收到导入错误:
mainmodule.submodule.teststring
当我跟随hello world
和python setup.py install
时,我看不出我做错了什么。我想我的错误是一个非常小的错误,但我无法发现它并且感谢帮助。
你必须列出In [1]: from mymodule import mainmodule
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
/home/alexander/<ipython-input-1-cf4c9bafa487> in <module>()
----> 1 from mymodule import mainmodule
/home/alexander/build/bdist.linux-i686/egg/mymodule/mainmodule.py in <module>()
ImportError: No module named subdir
中的所有包,包括子包:
Getting started tutorial
或者你可以使用rules for importing intra-packages的魔法功能setup
:
setup(
name = "mytestmodule",
version = "0.0.1",
description = ("A simple module."),
packages=['mymodule', 'mymodule.subdir'],
)
这是提到setuptools
:
如果您有子包,则必须在包中明确列出它们,但package_dir中的任何条目都会自动扩展到子包。 (换句话说,Distutils不会扫描你的源代码树,试图通过查找
find_packages
文件找出哪些目录对应于Python包。)
您需要明确指定每个模块。您可以使用from setuptools import setup, find_packages
setup(
name = "mytestmodule",
version = "0.0.1",
description = ("A simple module."),
packages=find_packages(),
)
中的here方法,而不是每次都保持向setup.py添加模块的复杂性。
__init__.py
有两个可选参数:
find_packages
默认为setuptools
,即你的curdir。find_packages
要排除的东西列表我通常在我的仓库中进行测试,所以我使用:
where
我在我的setup.py console_scripts中有'.'
,exclude
是多余的。