使用Python 3 setuptools时,单个模块会变成PyPi上的软件包

时间:2019-08-30 08:15:21

标签: python pypi

我正在尝试更改我先前在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

编辑1:

我尝试了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的情况下,它以前是如何工作的。

编辑2:

现在,我发现了它是如何工作的。我确实使用python 2运行python setup.py sdist bdist_wheel

问题仍然存在,我到底如何使用python 3 setuptools发布单个模块?我是由于python 3.3中引入的隐式命名空间而看到的行为吗?

0 个答案:

没有答案