无法为pip创建Python包

我在创建Python包分发中一直没有成功.我已按照https://packaging.python.org/tutorials/packaging-projects/中的说明进行操作,这就是发生的情况.例如如果我根据需要创建必要的文件和文件夹

first/
   first/
     __init__.py
     setup.py
     LICENSE
     README.md
     myfirst.py

我在setup.py中将软件包名称设置为“ first”

import setuptools

with open("README.md", "r") as fh:
    long_description = fh.read()

    setuptools.setup(
        name="tvg11",
        version="0.0.1",
        author="Ganesh",
        author_email="tvganesh.85@gmail.com",
        description="A small example package",
        long_description=long_description,
        long_description_content_type="text/markdown",
        url="https://github.com/pypa/sampleproject",
        packages=setuptools.find_packages(),
        classifiers=[
            "Programming Language :: Python :: 3",
            "License :: OSI Approved :: MIT License",
            "Operating System :: OS Independent",
        ],
    )

然后我运行命令

python setup.py sdist bdist_wheel
python -m twine upload --repository-url https://test.pypi.org/legacy/ dist/*

这将创建dist /,build /和first.egg-info.

现在,我发现如果我在同一目录中并执行

pip install --index-url https://test.pypi.org/simple/ first

然后我发现这将使用编译后的代码创建一个新的文件夹pycache,并且我能够先导入

first/
  first/
    __pycache__     # new!
    build/
    dist/
    first.egg.info
    __init__.py
    setup.py
    LICENSE
    README.md
    myfirst.py

但是,如果我位于根文件夹“ first / first”以外的其他任何文件夹中,

pip install --index-url https://test.pypi.org/simple/ first

我得到一个“成功安装”,但是当我调用python并首先进行导入时,我得到ModuleNotFoundError“没有模块’第一’”.

请让我知道我在做什么错.指示是如此简单.

解决方法:

您应该已经在test.pypi.org中进行了交互查看…

您会立即注意到,您自己的项目不是first,而是tvg11.重要的是setup.py文件中的名称和版本号,而不是文件夹名称.

但是真正的原因是您已将软件包的文件放在与setup.py文件相同的级别,并且使用了packages = setuptools.find_packages().因此,由于在setup.py下没有任何软件包,因此find_packages一无所获,并且您构建了一个有趣的软件包,其中仅包含setup.py和README.md.

怎么修:

首先,您应该为您的软件包构建一个更通用的结构:

  - first
    - setup.py
    - LICENSE
    - README.md

    - first
        - __init__.py
        - myfirst.py

这样,find_package将找到第一个子文件夹的内容作为tvg11软件包的源.

上一篇:python-在Windows 7 64位中设置pip


下一篇:如何使easy_install在setup.py中执行自定义命令?