我正在尝试更改我先前在PyPi上发布的python模块。我有一个名为gaiaclient.py的python文件,该文件具有名为Client的类。
如果我使用pip install gaiaclient==0.0.9
安装旧版本,则一切正常。我可以这样称呼它:
>>> import gaiaclient
>>> myclient = gaiaclient.Client("http://localhost:1234")
pip show -f gaiaclient
显示它已安装以下文件:
Files:
__pycache__/gaiaclient.cpython-36.pyc
gaiaclient-0.0.9.dist-info/INSTALLER
gaiaclient-0.0.9.dist-info/METADATA
gaiaclient-0.0.9.dist-info/RECORD
gaiaclient-0.0.9.dist-info/WHEEL
gaiaclient-0.0.9.dist-info/top_level.txt
gaiaclient.py
如您所见,顶层只有gaiaclient.py模块,没有__init__.py
文件。
现在,我想发布gaiaclient的新版本,但我无法使其按原样工作!经过试用后,我现在使用的是0.0.15版本。 我的setup.py看起来像这样:
import setuptools
with open("README.md", "r") as fh:
long_description = fh.read()
setuptools.setup(
name="gaiaclient",
version="0.0.15",
license='MIT License',
author="JOT Automation Ltd.",
author_email="rami.rahikkala@jotautomation.com",
description="Client for JOT Automation gaia machines",
long_description=long_description,
long_description_content_type="text/markdown",
url="https://github.com/jotautomation/gaiapythonclient",
py_modules=['gaiaclient'],
install_requires=['requests'],
classifiers=[
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
],
)
(整个项目可以从github中找到)
我尝试使用命令python setup.py sdist bdist_wheel
在本地安装使用命令pip install dist/gaiaclient-0.0.15.tar.gz
生成的软件包,然后仍然可以与0.0.9版本一起使用。在PyPi(twine upload dist/*
)上发布相同的程序包时,情况会发生变化。
当我从pypi pip install gaiaclient==0.0.15
安装它时,除了顶层gaiaclient.py外,还会安装gaiaclient / init .py和gaiaclient / gaiaclient.py!即现在是一个包裹。如何停止包含额外文件?因为现在我不能再只import gaiaclient
了,但我必须像这样from gaiaclient import gaiaclient
那样做,我不想这样做。
从PyPi安装的0.0.15版本的文件列表:
Files:
__pycache__/gaiaclient.cpython-36.pyc
gaiaclient-0.0.15.dist-info/INSTALLER
gaiaclient-0.0.15.dist-info/LICENSE
gaiaclient-0.0.15.dist-info/METADATA
gaiaclient-0.0.15.dist-info/RECORD
gaiaclient-0.0.15.dist-info/WHEEL
gaiaclient-0.0.15.dist-info/top_level.txt
gaiaclient.py
gaiaclient/__init__.py
gaiaclient/__pycache__/__init__.cpython-36.pyc
gaiaclient/__pycache__/gaiaclient.cpython-36.pyc
gaiaclient/gaiaclient.py
我尝试了Score_Under建议的方法,即在__init__.py
中添加了from gaiaclient.gaiaclient import Client
。这不会改变任何东西。此方法可能还需要更改为setup.py,因为现在gaiaclient/__init__.py
与我指定的不同。
好的,再尝试一次。这次我将packages=['.'],
添加到setup.py。现在它实际上可以工作了。但!现在查看文件列表:
Files:
__init__.py
__pycache__/__init__.cpython-36.pyc
__pycache__/example.cpython-36.pyc
__pycache__/example_gcode.cpython-36.pyc
__pycache__/gaiaclient.cpython-36.pyc
example.py
example_gcode.py
gaiaclient-0.0.17.dist-info/INSTALLER
gaiaclient-0.0.17.dist-info/METADATA
gaiaclient-0.0.17.dist-info/RECORD
gaiaclient-0.0.17.dist-info/WHEEL
gaiaclient-0.0.17.dist-info/top_level.txt
gaiaclient.py
__init__.py
现在位于根级别,即site-packages目录中。这个不好。而且,在没有__init__.py
的情况下,它以前是如何工作的。
现在,我发现了它是如何工作的。我确实使用python 2运行python setup.py sdist bdist_wheel
。
问题仍然存在,我到底如何使用python 3 setuptools发布单个模块?我是由于python 3.3中引入的隐式命名空间而看到的行为吗?