我在 setup.cfg 中寻找“继承”其他附加功能的可能性,如下所示:
[options.extras_require]
all =
<doc>
<dev>
<test>
doc =
sphinx
dev =
dvc
twine # for publishing
<test>
test =
flake8
pytest
pytest-cov
coverage
pytest-shutil
pytest-virtualenv
pytest-fixture-config
pytest-xdist
Run Code Online (Sandbox Code Playgroud)
我希望通过运行来安装所有附加功能
pip install PACKAGE[all]
Run Code Online (Sandbox Code Playgroud) 当我尝试安装我的软件包时,它没有安装任何东西。当我find_packages手动执行时,它返回一个空列表。
这是我的 setup.py 文件:
from setuptools import setup, find_packages
with open('README.md') as f:
long_description = f.read()
setup(
...
packages=find_packages(),
python_requires='>=3.6',
...
)
Run Code Online (Sandbox Code Playgroud)
我的目录结构是
hackathon-base
|- hackathon
|- __main__.py
|- dir1
|- dir2
|- setup.py
Run Code Online (Sandbox Code Playgroud) 我想创建一个 python 包,当构建运行时,它将从其 git 存储库克隆,因此我将在构建代理中拥有源代码。然后我想将 python 包作为命令行工具运行,该包称为environment_manager.
最初,我以为我会按照一个教程来创建一个简单的包,setup.py尽管事实证明这比我想象的要困难得多,而且每当我运行时,python setup.py install --force我都无法使用我安装的包,通常要么找不到模块,要么命令当我输入时无法识别。
我发现,如果我简单地安装,pip install .那么我实际上可以从命令行使用该工具并且它可以工作。我不明白有什么区别,也不明白为什么这只在执行 pip install 方法时才有效。
下面是该setup.py文件,我看不出它有什么问题:
from setuptools import setup, find_packages, find_namespace_packages
import pathlib
here = pathlib.Path(__file__).parent.resolve()
# Get the long description from the README file
long_description = (here / 'README.MD').read_text(encoding='utf-8')
setup(
name='environment_manager',
version='1.0.0',
package_dir={'': 'src'},
packages=find_namespace_packages(where='src', include='environment_manager.*'),
python_requires='>=3.8, <4',
install_requires=['boto3', 'botocore', 'pyyaml'],
extras_require={
'dev': ['pre-commit', 'black', 'pylint'],
'test': ['pytest', 'pytest-mock', 'coverage'],
},
entry_points={
'console_scripts': [
'environment-manager=environment_manager.environment_controller:main',
], …Run Code Online (Sandbox Code Playgroud) mymodule.c 启动如下:
#define PY_SSIZE_T_CLEAN
#define Py_LIMITED_API 0x03070000
#include "Python.h"
Run Code Online (Sandbox Code Playgroud)
它构建时没有错误和警告。然而,生成的文件被命名为
mymodulename.cpython-37m-x86_64-linux-gnu.so
Run Code Online (Sandbox Code Playgroud)
构建命令:
$ python setup.py build
Run Code Online (Sandbox Code Playgroud)
当我改为发出
$ pip wheel .
Run Code Online (Sandbox Code Playgroud)
轮子中包含的扩展名称相同,因此轮子也没有 ABI3 标签。
我期望文件名是 abi3 或类似的文件名,如 PEP 425 中所述。
到目前为止我的研究令人沮丧。我查看了 PEP 384 和 425、docs.python.org 上的文档和相关教程,特别是它的 C/API 和 distutils、PYPA 的文档、setuptools、wheel 和 pip 上的文档 - 无济于事。
当前 Python 源发行版中包含的文件 /modules/xxmodule.c 仅具有历史意义。
我在这里缺少什么?
我一直在尝试正确打包我的 python 代码,将其上传到 git 上,然后安装在虚拟环境中,所有这些我都做了并且似乎工作得很好。问题是,一旦我在虚拟环境上安装我的代码,当我运行我的包时:
python3 -m mypackage
Run Code Online (Sandbox Code Playgroud)
它会引发一个错误,表明我导入的模块__main__.py(我的包有一个目录包含所有内容:__init__.py、__main__.py、module1.py等)中没有一个被看到。但是,一旦我“cd”到虚拟环境中安装包的位置,它就可以看到所有模块并且一切正常。我猜我的文件有问题setup.cfg,我猜“查找”命令没有执行它们应该执行的操作
还请让我知道是否还有其他东西可以写得更优雅。
[metadata]
# replace with your username:
name = my_package
version = 0.0.1
author = my_name
author_email = name@email.com
description =
long_description = file: README.md
long_description_content_type = text/markdown
url = https://github.com/myname/mypackage
project_urls =
Bug Tracker = https://github.com/myname/mypackage/issues
classifiers =
Programming Language :: Python :: 3
License :: OSI Approved :: MIT License
Operating System :: OS Independent
[options]
package_dir =
= …Run Code Online (Sandbox Code Playgroud) 我正在学习如何使用 setuptools 分发 python 包,但遇到了问题。
\nsetuptools 正在将包含单个 python 文件的文件夹的名称设置为我的包的名称。以下是我的存储库的结构:
\ngerador_endereco/\n-- setup.py\n-- my_package/\n -- __init__.py\n -- gerador_endereco.py\nRun Code Online (Sandbox Code Playgroud)\n我的 setup.py 是:
\nsetup(\n name=\'gerador_endereco\',\n version=\'1.0.4\',\n author=\'Michel Metran\',\n description=\'API para cria\xc3\xa7\xc3\xa3o ...\',\n url=\'https://github.com/open-dsa/gerador_endereco\',\n packages=find_packages(),\n install_requires=requirements,\n)\nRun Code Online (Sandbox Code Playgroud)\n据我了解,setuptools与包的分发有关,由几个模块组成。但我知道可以分发由单个模块组成的包,但是如何正确导入包而不出现文件夹名称?
\n# Install\n!pip install gerador-endereco\n\n# Import work using "my_package" directory: bad...\nfrom my_package.gerador_endereco import *\n\n# I\'d like import like this!!!\nfrom gerador_endereco import *\n\n# Run\nlistas = get_list_ceps_bairros(estado=\'sp\', municipio=\'piracicaba\')\nRun Code Online (Sandbox Code Playgroud)\n\n 我正在尝试从 Git 存储库中的源代码构建 pip 包,该存储库具有多个共享公共包的包。(我不允许更改此 Git 存储库的结构。)
\n结构是:
\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 common\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 run_helpers\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 aws.py\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 s3.py\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 components\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 redshift_unload\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 redshift_unload\n \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 run.py\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 setup.py\nRun Code Online (Sandbox Code Playgroud)\n我的setup.py如下:
\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 common\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 run_helpers\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 aws.py\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 s3.py\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 components\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 redshift_unload\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 redshift_unload\n \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 run.py\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 setup.py\nRun Code Online (Sandbox Code Playgroud)\n看看这里的其他答案,到目前为止我尝试过的事情包括:
\npackages=而不是使用find_packages().尝试部署 python 应用程序时,Heroku 部署开始返回此错误:
\n-----> Installing requirements with pip\n Collecting amqp==2.6.1\n Downloading amqp-2.6.1-py2.py3-none-any.whl (48 kB)\n Collecting anyjson==0.3.3\n Downloading anyjson-0.3.3.tar.gz (8.3 kB)\n Preparing metadata (setup.py): started\n Preparing metadata (setup.py): finished with status 'error'\n error: subprocess-exited-with-error\n \n \xc3\x97 python setup.py egg_info did not run successfully.\n \xe2\x94\x82 exit code: 1\n \xe2\x95\xb0\xe2\x94\x80> [1 lines of output]\n error in anyjson setup command: use_2to3 is invalid.\n [end of output]\n \n note: This error originates from a subprocess, and is likely not a problem with pip.\n …Run Code Online (Sandbox Code Playgroud) 我的项目有以下包树
\n\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 src\n| \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 mypkg1\n| \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 module1.py\n| \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 module2.py\n| \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 __init__.py\n| | |-- setup.py\n| | |__ requirements.py \n| \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 mypkg2\n| \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 module1.py\n| \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 __init__.p\n|\n|---- base\n| |----- init.py\n| |----- module1.py \nRun Code Online (Sandbox Code Playgroud)\n注意 - src 和 base 处于同一级别。
\n我应该如何配置setup.py文件,以便我只能安装base和mypkg1打包并排除mypkg2.
我曾尝试['base','mypkg1']在软件包中提及,但没有成功,也尝试过使用find_packages()它只会显示mypkg1并且mypkg2。
更新 pip 和 setuptools==66.0 后,pip 停止工作并响应所有调用它的尝试,如下所示:
Traceback (most recent call last):
File "/usr/bin/pip", line 6, in <module>
from pkg_resources import load_entry_point
File "/usr/local/lib/python3.8/dist-packages/pkg_resources/__init__.py", line 3249, in <module>
def _initialize_master_working_set():
File "/usr/local/lib/python3.8/dist-packages/pkg_resources/__init__.py", line 3223, in _call_aside
f(*args, **kwargs)
File "/usr/local/lib/python3.8/dist-packages/pkg_resources/__init__.py", line 3261, in _initialize_master_working_set
working_set = WorkingSet._build_master()
File "/usr/local/lib/python3.8/dist-packages/pkg_resources/__init__.py", line 619, in _build_master
return cls._build_from_requirements(__requires__)
File "/usr/local/lib/python3.8/dist-packages/pkg_resources/__init__.py", line 632, in _build_from_requirements
dists = ws.resolve(reqs, Environment())
File "/usr/local/lib/python3.8/dist-packages/pkg_resources/__init__.py", line 1044, in __init__
self.scan(search_path)
File "/usr/local/lib/python3.8/dist-packages/pkg_resources/__init__.py", line 1077, in scan
self.add(dist)
File "/usr/local/lib/python3.8/dist-packages/pkg_resources/__init__.py", …Run Code Online (Sandbox Code Playgroud) setuptools ×10
python ×9
pip ×4
setup.py ×3
c ×1
distutils ×1
distutils2 ×1
heroku ×1
installation ×1
linux ×1
package ×1
packaging ×1
python-3.8 ×1
virtualenv ×1