带有setuptools模块的Python包没有属性
下面是关于python打包的pycon视频 我有一个目录:带有setuptools模块的Python包没有属性,python,pypi,Python,Pypi,下面是关于python打包的pycon视频 我有一个目录: mypackage/ \uuuu init\uuuuu.py mypackage.py readme.md setup.py mypackage.py的内容: class MyPackage():
mypackage/
\uuuu init\uuuuu.py
mypackage.py
readme.md
setup.py
mypackage.py的内容:
class MyPackage():
'''
My Damn Package
'''
def spam(self):
return "eggs"
import setuptools
setuptools.setup(
name='mypackage',
version='0.0.1',
description='My first package',
packages=setuptools.find_packages()
)
from mypackage import mypackage
setup.py的内容:
class MyPackage():
'''
My Damn Package
'''
def spam(self):
return "eggs"
import setuptools
setuptools.setup(
name='mypackage',
version='0.0.1',
description='My first package',
packages=setuptools.find_packages()
)
from mypackage import mypackage
现在,我创建了一个虚拟环境,并安装了以下软件包:
pip install -e .
现在我做到了:
python
>>> import mypackage
>>> mypackage.MyPackage().spam()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: module 'mypackage' has no attribute 'MyPackage'
python
>>>导入mypackage
>>>mypackage.mypackage().spam()
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
AttributeError:模块“mypackage”没有属性“mypackage”
为什么这不符合guy的教程?当您导入mypackage
时,您只导入mypackage/\uuuu init\uuuuuuy.py
。要访问MyPackage
您需要MyPackage/MyPackage.py
:
class MyPackage():
'''
My Damn Package
'''
def spam(self):
return "eggs"
import setuptools
setuptools.setup(
name='mypackage',
version='0.0.1',
description='My first package',
packages=setuptools.find_packages()
)
from mypackage import mypackage
当您执行导入mypackage
时,您只导入mypackage/\uuuu init\uuuuu.py
。要访问MyPackage
您需要MyPackage/MyPackage.py
:
class MyPackage():
'''
My Damn Package
'''
def spam(self):
return "eggs"
import setuptools
setuptools.setup(
name='mypackage',
version='0.0.1',
description='My first package',
packages=setuptools.find_packages()
)
from mypackage import mypackage
您可以将from.mypackage import*
放在init.py
文件中。您可以将from.mypackage import*
放在init.py
文件中。如何防止这种情况发生?写这篇文章很不方便,如果您只是导入mypackage
,那么您需要执行mypackage.mypackage.mypackage()
。我怎样才能使导入mypackageimportmypackage.py
,而不仅仅是\uuuuuu init\uuuuuuuuuuuuuuuuuuupy
?我尝试将import-mypackage
放在\uuu-init\uuuuuuuuuuuuuuuuuuuuupy
中,但似乎没有任何改变。使用相对导入:import.mypackage
在\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu.py
中。甚至从.mypackage导入mypackage
。这实际上抛出了一个语法错误
(我觉得这很奇怪,因为我还认为它应该可以工作)。无论如何,我最终采用的解决方案是将mypackage.mypackage import*
中的放在\uuu init\uuuu.py
中。由于mypackage
是包含mypackage.py
的目录,因此在键入import mypackage
时,将调用\uuuuu init\uuuuuuuuuuuuuuupy
以访问mypackage.py
中的实际主代码并从中导入所有内容。在此之后,只需编写MyPackage.MyPackage
即可访问MyPackage
。另外,从mypackage导入*
将直接导入mypackage
,因此我可以使用mypackage
。如何防止这种情况?写这篇文章很不方便,如果您只是导入mypackage
,那么您需要执行mypackage.mypackage.mypackage()
。我怎样才能使导入mypackageimportmypackage.py
,而不仅仅是\uuuuuu init\uuuuuuuuuuuuuuuuuuupy
?我尝试将import-mypackage
放在\uuu-init\uuuuuuuuuuuuuuuuuuuuupy
中,但似乎没有任何改变。使用相对导入:import.mypackage
在\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu.py
中。甚至从.mypackage导入mypackage
。这实际上抛出了一个语法错误
(我觉得这很奇怪,因为我还认为它应该可以工作)。无论如何,我最终采用的解决方案是将mypackage.mypackage import*
中的放在\uuu init\uuuu.py
中。由于mypackage
是包含mypackage.py
的目录,因此在键入import mypackage
时,将调用\uuuuu init\uuuuuuuuuuuuuuupy
以访问mypackage.py
中的实际主代码并从中导入所有内容。在此之后,只需编写MyPackage.MyPackage
即可访问MyPackage
。另外,从mypackage导入*
将直接导入mypackage
,因此我可以使用mypackage
。