Python 包创建
Python Package Creation
我有一个要创建的包。目录层次结构如下所示。
Package/
__init__.py
Part1/
__init__.py
item.py
load_items.py
Part2/
__init__.py
section.py
Part3/
__init__.py
mappings/
file1.txt
file2.txt
...
file10.txt
map.py
unmapped.txt
我还有一些其他文件 main.py 不在包中,但我已将其放入
import Package
print(dir(Package))
这个输出是
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__']
但是我希望在此列表中看到“第 1 部分”、“第 2 部分”和“第 3 部分”。我也试过了
print(Package.Part1)
我收到一个属性错误:包没有属性 Part1。
这是我制作的第一个包,我也不确定为什么每个目录都需要__init__.py
?或许这是错误的,但事实并非如此。我已经阅读了一堆关于堆栈溢出的其他问题,但其中 none 确实帮助我理解了。基本上,我正在寻找我的包的结构是否正确以及为什么当我执行 dir(Package) 时它的部分没有列出。
dir
return 一个对象的所有变量和方法
例如:
class Person:
name = "John"
def foo(self):
return "Hello"
print(dir(Person))
>> out
[... 'foo', 'name']
如果要列出目录下的所有目录和文件,可以这样做
import os
os.listdir(path)
您可以使用 importlib
检索已安装包的路径
这里是 requests
包
的例子
import importlib.util
path = importlib.util.find_spec("requests").origin
>> out :
..../python3.7/site-packages/requests/__init__.py'
结合这两种方法,我们可以列出包的所有目录
import importlib.util
import os
path = importlib.util.find_spec("requests").origin
# remove the "/__init__.py" part
path = path[:-11]
os.listdir(path)
>> out :
['cookies.py',
'auth.py',
'sessions.py',
...
]
每个目录都需要__init__.py
。
该文件告诉您的 python 解释器该文件夹是一个 python 包。没有它,您将无法在其他文件夹中导入包。
我有一个要创建的包。目录层次结构如下所示。
Package/
__init__.py
Part1/
__init__.py
item.py
load_items.py
Part2/
__init__.py
section.py
Part3/
__init__.py
mappings/
file1.txt
file2.txt
...
file10.txt
map.py
unmapped.txt
我还有一些其他文件 main.py 不在包中,但我已将其放入
import Package
print(dir(Package))
这个输出是
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__']
但是我希望在此列表中看到“第 1 部分”、“第 2 部分”和“第 3 部分”。我也试过了
print(Package.Part1)
我收到一个属性错误:包没有属性 Part1。
这是我制作的第一个包,我也不确定为什么每个目录都需要__init__.py
?或许这是错误的,但事实并非如此。我已经阅读了一堆关于堆栈溢出的其他问题,但其中 none 确实帮助我理解了。基本上,我正在寻找我的包的结构是否正确以及为什么当我执行 dir(Package) 时它的部分没有列出。
dir
return 一个对象的所有变量和方法
例如:
class Person:
name = "John"
def foo(self):
return "Hello"
print(dir(Person))
>> out
[... 'foo', 'name']
如果要列出目录下的所有目录和文件,可以这样做
import os
os.listdir(path)
您可以使用 importlib
这里是 requests
包
import importlib.util
path = importlib.util.find_spec("requests").origin
>> out :
..../python3.7/site-packages/requests/__init__.py'
结合这两种方法,我们可以列出包的所有目录
import importlib.util
import os
path = importlib.util.find_spec("requests").origin
# remove the "/__init__.py" part
path = path[:-11]
os.listdir(path)
>> out :
['cookies.py',
'auth.py',
'sessions.py',
...
]
每个目录都需要__init__.py
。
该文件告诉您的 python 解释器该文件夹是一个 python 包。没有它,您将无法在其他文件夹中导入包。