我试图制作一个自定义包[(链接(][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-packages
或dist-packages
(。顶级脚本也是.py文件,但通常位于操作系统可以在系统PATH
中找到它们的位置。
由于您有一个只有一个模块的包,因此可以很容易地将其作为单个模块分发。如果您有多个python模块要组合在一起,或者计划在将来这样做,那么您只需要一个包。对于单个模块分发版,可以返回到原始结构并删除__init__.py
。在setup.py
中,删除packages=setuptools.find_packages(),
并添加py_modules=["Tricks"],
。现在,import tricks
可以工作了。您也可以将.py重命名为willytricks.py
以使import willytricks
工作。