ModuleNotFoundError:没有模块命名我的包,但我可以在pip-freeze中找到它



我试图制作一个自定义包[(链接(][1]像这个

[ '|-- willytricks',
'    |-- __init__.py',
'    |-- directoryList.md',
'    |-- setup.py',
'    |-- trick.py',
'    |-- build',
'    |   |-- bdist.linux-x86_64',
'    |-- dist',
'    |   |-- willytricks-0.0.1-py3.6.egg',
'    |   |-- willytricks-0.0.1.tar.gz',
'    |-- willytricks.egg-info',
'        |-- PKG-INFO',
'        |-- SOURCES.txt',
'        |-- dependency_links.txt',
'        |-- top_level.txt',
'
]

setup.py:

import setuptools
setuptools.setup(
name="willytricks",
version="0.0.1",
author="wil75822",
author_email="lunasdejavu@gmail.com",
description="",
long_description=" useful python tools",
long_description_content_type="text",
url="www.ntu.edu.tw",
packages=setuptools.find_packages(),
classifiers=[
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
],
)

然后我键入python setup.py sdist

sudo pip3 install "~/dist/willytricks-0.0.1.tar.gz"

我可以通过pip3 freeze找到它信息:

willytricks @ file:///data/workspace/willy_sung/willytricks/dist/willytricks-0.0.1.tar.gz

但我不能在python3 中import willytricks

import willytricks
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'willytricks'

谢谢你们!按照你的建议,我现在可以导入willytricks了但它显示了另一个错误

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/data/workspace/willy_sung/myproject/dist/willytricks-0.0.1/willytricks/__init__.py", line 1, in <module>
from trick import *
ModuleNotFoundError: No module named 'trick'

我应该在init.py中放入什么?[1] :https://l.messenger.com/l.php?u=https%3A%2F%2Fdrive.google.com%2Ffile%2Fd%2F1rrS_JzOMcwx7b_-6xkF85Jo8GQnp3H0M%2View%3usp%3Sharing&h=AT1V7YbJgVgstXoSU7qiD6wdO-rjPdcXjNJ6HVTWfZ0y-zNFF4nSiLBvXZRDU8OC05PiZZGg8V9VyecHgxUJdlrKR152cyh5VUALDTFE4KZ3RQsfe8yR9rznQLflTbwr2o

Python分发包的名称不必与它们实际交付的脚本、模块和包相同。当您在willytricks中运行setup.py时,它没有找到任何包,并且构建了一个";willytricks"分发时没有任何包裹。

如果我手动运行扫描仪,

>>> import os
>>> os.getcwd()
'/home/td/tmp/bbb/willytricks'
>>> import setuptools
>>> setuptools.find_packages()
[]

但如果我回到一个目录并再次扫描,就会发现一个包

>>> os.chdir("..")
>>> os.getcwd()
'/home/td/tmp/packagedir'
>>> setuptools.find_packages()
['willytricks']

您需要将setup.py和不属于包的所有内容向上移动一个目录。这个目录可以命名为任何名称。事实上,将其命名为与包相同是很常见的。使用源代码管理是很常见的,您可以同时在不同的目录中签出这些文件的多个副本。

将你的结构更改为以下内容,它应该会起作用。

<projectdir>--|-- willytricks
|           |-- __init__.py
|           |-- trick.py
|-- directoryList.md
|-- setup.py
|-- build
...
|-- dist
...
|-- willytricks.egg-info
...

脚本、模块和包

一条蟒蛇"包装";是一个包含.py模块和子包的目录。有点不幸的是,我们最终谈论的是包装。模块和包被安装到python已知的后台目录中(可能是python发行版中的site-packagesdist-packages(。顶级脚本也是.py文件,但通常位于操作系统可以在系统PATH中找到它们的位置。

由于您有一个只有一个模块的包,因此可以很容易地将其作为单个模块分发。如果您有多个python模块要组合在一起,或者计划在将来这样做,那么您只需要一个包。对于单个模块分发版,可以返回到原始结构并删除__init__.py。在setup.py中,删除packages=setuptools.find_packages(),并添加py_modules=["Tricks"],。现在,import tricks可以工作了。您也可以将.py重命名为willytricks.py以使import willytricks工作。

相关内容

  • 没有找到相关文章

最新更新