Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.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
Python __init__;py没有将模块转换为包_Python_Packaging - Fatal编程技术网

Python __init__;py没有将模块转换为包

Python __init__;py没有将模块转换为包,python,packaging,Python,Packaging,我不确定这是否是一个愚蠢的问题,但我对包装和类似的东西没有经验。以下是包含文件的树结构: . ├── main.py └── stringfunc ├── __init__.py └── toLower.py main.py: 导入系统 导入stringfunc def main(): 打印(stringfunc.toLower.to_lower(sys.argv[1])) 返回0 如果名称=“\uuuuu main\uuuuuuuu”: main() toLower.py:

我不确定这是否是一个愚蠢的问题,但我对包装和类似的东西没有经验。以下是包含文件的树结构:

.
├── main.py
└── stringfunc
    ├── __init__.py
    └── toLower.py
main.py:

导入系统 导入stringfunc def main(): 打印(stringfunc.toLower.to_lower(sys.argv[1])) 返回0 如果名称=“\uuuuu main\uuuuuuuu”: main() toLower.py: def至_下部(仪表): 返回仪表下部() 并且
\uuuu init\uuuuu.py
文件为空。
stringfunc
目录现在有一个
\uuuu init\uuuuuu.py
文件时,不是应该像一个包一样工作吗?我知道我可以在
\uuuu init\uuuuuuuuuuuuy.py
中使用
from.toLower import to\u lower
来实现一种更简单、更不丑陋的方式,但我在一本书中看到,这段代码也必须工作,但它不能。所以我恐怕不明白它到底是怎么工作的

以下是错误:

AttributeError:模块“stringfunc”没有属性“toLower”


显然,Python仍然认为它是一个“模块”,而不是一个“包”。

您已经完成了几乎所有需要做的事情。但是,导入不会自动获取所有路径并公开它们。您需要执行以下操作之一:

  • 导入
    stringfunc.toLower
  • toLower
    添加到
    \uuuuuu init\uuuuuuuuuuu.py
要展开“添加
toLower
”选项:


第一个正在工作!谢谢但是你能解释第二个吗?(将toLower添加到
\uuuu init\uuuuuuuuy.py
)您的意思是我在那里导入它?因为有一次我这样做了,它给出了一个错误:
modulenofounderror:No module'toLower'
我假设您试图在
\uuuu init\uuuuu.py
中进行绝对导入,但这不起作用,因为在init完成加载之前您不会有一个模块。你可以做相对导入。不,我没有做绝对导入。感谢您的编辑和您的时间。但是,即使我使用与您在编辑中输入的结构完全相同的结构,我仍然会得到相同的错误。1我在我的
\uu init\uuuuuuuuupy
文件中添加
import-toLower
,然后2我运行这个:
python-c'import-stringfunc;打印(stringfunc.toLower.to_lower(“ABC”)”)”
。但是我得到了相同的错误:
modulenofounderror:没有名为“toLower”的模块
。也许我犯了一个愚蠢的错误。另外,我没有完全理解您所说的部分:“在init完成加载之前,您不会有一个模块”。当然,我没有绝对导入。啊,对不起,这是py27对py3k的问题。你必须把py3kOh的绝对重要性。。。这就是问题所在。。。我猜Python会解释包内相对于导入发生的初始点(在本例中,在main.py中)的相对导入,对吗。。。?非常感谢。要使用
stringfunc
作为一个包并使用不同的函数,您需要在init文件中加载函数,因此在init.py文件中加载
import toLowe
@sahasrara62谢谢,但我想Cireo和我已经尝试过了,但它在Python3上不起作用。在Python3上,必须绝对导入toLower。只需在您的
\uuu init\uuuu.py
文件中写入
。导入toLower
,然后执行您正在执行的操作
foo/__init__.py
# py2k
> from foobar import foobarval
> import foobaz
# py3k
> from foo.foobar import foobarval
> import foo.foobaz as foobaz

foo/foobar.py
> foobarval = 1

foo/foobaz.py
> foobazval = 2
$ python -c 'import foo; print(foo.foobarval)'
1
$ python -c 'import foo; print(foo.foobaz.foobazval)'
2