Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有setuptools模块的Python包没有属性_Python_Pypi - Fatal编程技术网

带有setuptools模块的Python包没有属性

带有setuptools模块的Python包没有属性,python,pypi,Python,Pypi,下面是关于python打包的pycon视频 我有一个目录: mypackage/ \uuuu init\uuuuu.py mypackage.py readme.md setup.py mypackage.py的内容: class MyPackage():

下面是关于python打包的pycon视频

我有一个目录:

  • 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()
。我怎样才能使导入mypackage
import
mypackage.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()
。我怎样才能使导入mypackage
import
mypackage.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