PyPI 包在所述包中找不到函数
PyPI package can't find functions in said package
我制作了一个名为 'pyutils39' 的 python 包。到目前为止,它具有函数 consoleask(question) 和 reverse(text)。它似乎上传正常并且在 pypi 上有一个页面。 (https://pypi.org/project/pyutils39).
我的问题
为了测试,我用 .\pip install pyutils39
安装了我的包。好像安装成功了,进入\Lib\site-packages\pyutils39确实有文件。但是,当我 运行 我的测试文件时,它崩溃了
Traceback (most recent call last):
File "c:\Users\<MY USER>\AppData\Local\Programs\Python\Python39\Scripts\test.py", line 2, in <module>
x = pyutils39.consoleask("Do you want to reverse hello?")
AttributeError: module 'pyutils39' has no attribute 'consoleask'
完全删除包的所有痕迹会导致错误 'Module Not Found'(预期)。将包文件放在与测试文件相同的文件夹中就可以了。
我试过的
我已经重新安装了我的包,重新制作了测试文件,并在 google 和堆栈溢出中搜索了这个问题,但没有任何效果。
代码
主文件:
def reverse(data):
x = str(data)
datalen = len(data)
x = x[datalen::-1]
return x
def consoleask(question):
while True:
print(str(question)+' (Y/N)')
x = input()
if x.lower().startswith('y'):
return True
break
elif x.lower().startswith('n'):
return False
break
测试文件
import pyutils39
x = pyutils39.consoleask("Do you want to reverse hello?")
if x == True:
print(pyutils39.reverse("hello"))
Setup.py
import setuptools
with open("README.md", "r", encoding="utf-8") as fh:
long_description = fh.read()
setuptools.setup(
name="pyutils39",
version="0.1.3",
author="Enderbyte09",
author_email="enderbyte09@gmail.com",
description="A utilities package",
long_description=long_description,
py_modules=['/src/pyutils39/pyutils39.py'],
long_description_content_type="text/markdown",
url="https://github.com/Enderbyte-Programs/pyutils39",
project_urls={
"Bug Tracker": "https://github.com/Enderbyte-Programs/pyutils39/issues",
},
classifiers=[
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
],
package_dir={"": "src"},
packages=setuptools.find_packages(where="src"),
python_requires=">=3.8",
)
我对Whosebug还是个新手,所以如果有什么方法可以改进我的问题,请告诉我。
问题在于 setup.py
对包源使用了错误的指令。
在 setup()
调用中,使用 py_modules=['pyutils39.py']
- py_modules
用于声明单文件模块。现在它可能使用 packages
或类似的参数,将整个目录声明为一个模块。很难做出更明智的猜测,因为回购中缺少 setup.py
。
对于当前的布局,这可能会起作用:
from pyutils39 import pyutils39
我制作了一个名为 'pyutils39' 的 python 包。到目前为止,它具有函数 consoleask(question) 和 reverse(text)。它似乎上传正常并且在 pypi 上有一个页面。 (https://pypi.org/project/pyutils39).
我的问题
为了测试,我用 .\pip install pyutils39
安装了我的包。好像安装成功了,进入\Lib\site-packages\pyutils39确实有文件。但是,当我 运行 我的测试文件时,它崩溃了
Traceback (most recent call last):
File "c:\Users\<MY USER>\AppData\Local\Programs\Python\Python39\Scripts\test.py", line 2, in <module>
x = pyutils39.consoleask("Do you want to reverse hello?")
AttributeError: module 'pyutils39' has no attribute 'consoleask'
完全删除包的所有痕迹会导致错误 'Module Not Found'(预期)。将包文件放在与测试文件相同的文件夹中就可以了。
我试过的
我已经重新安装了我的包,重新制作了测试文件,并在 google 和堆栈溢出中搜索了这个问题,但没有任何效果。
代码
主文件:
def reverse(data):
x = str(data)
datalen = len(data)
x = x[datalen::-1]
return x
def consoleask(question):
while True:
print(str(question)+' (Y/N)')
x = input()
if x.lower().startswith('y'):
return True
break
elif x.lower().startswith('n'):
return False
break
测试文件
import pyutils39
x = pyutils39.consoleask("Do you want to reverse hello?")
if x == True:
print(pyutils39.reverse("hello"))
Setup.py
import setuptools
with open("README.md", "r", encoding="utf-8") as fh:
long_description = fh.read()
setuptools.setup(
name="pyutils39",
version="0.1.3",
author="Enderbyte09",
author_email="enderbyte09@gmail.com",
description="A utilities package",
long_description=long_description,
py_modules=['/src/pyutils39/pyutils39.py'],
long_description_content_type="text/markdown",
url="https://github.com/Enderbyte-Programs/pyutils39",
project_urls={
"Bug Tracker": "https://github.com/Enderbyte-Programs/pyutils39/issues",
},
classifiers=[
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
],
package_dir={"": "src"},
packages=setuptools.find_packages(where="src"),
python_requires=">=3.8",
)
我对Whosebug还是个新手,所以如果有什么方法可以改进我的问题,请告诉我。
问题在于 setup.py
对包源使用了错误的指令。
在 setup()
调用中,使用 py_modules=['pyutils39.py']
- py_modules
用于声明单文件模块。现在它可能使用 packages
或类似的参数,将整个目录声明为一个模块。很难做出更明智的猜测,因为回购中缺少 setup.py
。
对于当前的布局,这可能会起作用:
from pyutils39 import pyutils39