标签: python-packaging

setup.py-配置私人/商业项目

我可以在setup.py项目配置文件中放些什么,以告诉开发人员该项目是私有/商业应用程序/库。

目前我设定:

setup(
    name='MyProject',
    version='0.1.0',
    license='(c) My Company',
    ...
)
Run Code Online (Sandbox Code Playgroud)

有最佳做法吗?

注意:

如今,大多数项目都是开源的,并且遵循许可证模型。但是,当您从事该行业时,软件是私有的。我的公司与离岸公司合作,这些公司可能不知道软件可以是私有的。因此,我想通过在setup.py文件中指定它来引起他们的注意。这就是为什么我在寻找最佳实践的原因。

结论/解决方案

对于私人/专有应用程序,我将遵循rth的建议

  • 将许可证属性设置为“专有”,
  • 添加分类器“许可证::其他/专有许可证”,
  • 并可能添加一个LICENSE文件。

模板将是这样的:

setup(
    name='MyProject',
    version='0.1.0',
    license="Proprietary",
    classifiers=[
        'License :: Other/Proprietary License',
        ...
    ],
    ...
)
Run Code Online (Sandbox Code Playgroud)

一种替代方法是设置“非开源”,如cookiecutter-pypackage模板中定义的那样

python python-packaging

7
推荐指数
1
解决办法
3280
查看次数

我应该如何在setup.py脚本中处理导入第三方库?

我正在开发Python应用程序,并且正在分支发行版本。我已经在公司服务器上设置了PyPI服务器,并且已经将软件包的源代码分发复制到了该服务器上。

我检查了软件包是否托管在服务器上,然后尝试将其安装在本地开发计算机上。我最终得到以下输出:

$ pip3 install --trusted-host 172.16.1.92 -i http://172.16.1.92:5001/simple/ <my-package>
Collecting <my-package>
  Downloading http://172.16.1.92:5001/packages/<my-package>-0.2.0.zip
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "C:\Users\<me>\AppData\Local\Temp\pip-build-ubb3jkpr\<my-package>\setup.py", line 9, in <module>
        import appdirs
    ModuleNotFoundError: No module named 'appdirs'

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in C:\Users\<me>\AppData\Local\Temp\pip-build-ubb3jkpr\<my-package>\
Run Code Online (Sandbox Code Playgroud)

其原因是,我试图导入第三方库appdirs在我setup.py,这是我有必要计算data_files参数setup()

try:
    from setuptools import setup
except ImportError:
    from distutils.core import setup

import os
from …
Run Code Online (Sandbox Code Playgroud)

python setup.py python-packaging

7
推荐指数
1
解决办法
803
查看次数

__init__.py在同一目录中找不到模块

我需要有关如何在python包中组织源代码的帮助-我已经在网络上关注了一些教程(尤其是教程),但该方法并没有按照说明以及我的想象进行。

我想创建一个名为的python包binaryio。它应该提供两个类命名BinaryReaderBinaryWriter我希望用户能够与进口

from binaryio import BinaryReader
from binaryio import BinaryWriter
Run Code Online (Sandbox Code Playgroud)

因此,我创建了我的存储库和包目录结构,如下所示:

  • binaryio(存储库根)
    • binaryio(软件包根)
      • __init __py(以下简称)
      • binaryreader.py(包含BinaryReader类)
      • binarywriter.py(包含BinaryWriter类)
    • setup.py(包含setuptools.setup调用)
    • .gitignoreREADME.md许可证,...

如您所见,这些类位于我习惯的单独文件中(来自C#背景)。由于模块是Python中的“单元”,我不确定这是否是一个好主意-但对我来说,将所有类限制在一个大文件中似乎并不合逻辑。

__init__.py看起来如下导入这些类,从而(据我所知)from binaryio import BinaryReader以后可以为用户提供导入:

from binaryreader import BinaryReader
from binarywriter import BinaryWriter
Run Code Online (Sandbox Code Playgroud)

但是,当我在本地安装该软件包(似乎工作正常)并尝试到时import binaryio,出现以下错误:

>>> import binaryio
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "D:\Projects\Git\binaryio\binaryio\__init__.py", …
Run Code Online (Sandbox Code Playgroud)

python python-packaging

7
推荐指数
2
解决办法
5980
查看次数

来自一棵源树的多个发行版

我有一个看起来像这样的源树:

\n\n
/app/backend/module.py\n/app/cli/module.py\n/app/common/module.py\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在我想构建三个包, ,app-backendapp-cli并且app-common其中应该是可分发的并且可以单独使用。\n我\xe2\x80\x99d 喜欢将代码保存在一个存储库中,因为我\xe2\x80\x99d 喜欢将所有内容放在一起,而且\xe2\x80\x99d 还没有那么多代码。

\n\n

使用 setuptools 执行此操作的最标准且面向未来的方法是什么(或者是否有更合适的方法)?我不是为 Python 2.7 等构建的,如果它只适用于最新的工具,我会很好。

\n

python setuptools python-3.x python-packaging

7
推荐指数
1
解决办法
800
查看次数

如何从Python中的其他文件夹导入模块?

我有一个项目要结构如下:

myproject
  __init__.py
  api
    __init__.py
    api.py
  backend
    __init__.py
    backend.py
  models
    __init__.py
    some_model.py
Run Code Online (Sandbox Code Playgroud)

现在,我想同时在api.py和backend.py中导入some_model.py模块。如何正确执行此操作?我试过了

from models import some_model
Run Code Online (Sandbox Code Playgroud)

但是失败并显示为“ ModuleNotFoundError:没有名为'models'的模块”。我也试过

from ..models import some_model
Run Code Online (Sandbox Code Playgroud)

然后给我“ ValueError:尝试相对顶级包进行相对导入”。我在这里做错了什么?如何从其他目录(不是子目录)导入文件?

python python-3.x python-packaging

7
推荐指数
2
解决办法
9675
查看次数

如何在带有 if __name__='__main__' 块的 Python3 中使用相对导入?

我正在制作一个包,这个包中的模块在if __name__=='__main__':块中包含用于测试目的的代码。但是我尝试在这些模块中使用相对导入会导致错误。

我已经阅读了这个帖子和其他十亿人: 第 10 亿次的相对进口

在将其标记为重复之前,如果我想做的事情在 Python3 中是不可能的,那么我的问题是为什么它可以在 Python2 中工作,以及是什么促使决定在 Python3 中如此麻烦?


这是我的示例 Python 项目:

mypackage
- module1.py
- module2.py
- __init__.py
Run Code Online (Sandbox Code Playgroud)

__init__.py并且module2.py是空的

module1.py 包含:

import module2

# module1 contents

if __name__=="__main__":
    # Some test cases for the contents of this module
    pass
Run Code Online (Sandbox Code Playgroud)

这在 Python2 中工作正常。我可以从我计算机上任何位置的其他项目导入 module1,我也可以直接运行 module1 并if运行块中的代码。

但是,这种结构在 Python3 中不起作用。如果我尝试在其他地方导入模块,它会失败:

>>> from mypackage import module1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\_MyFiles\Programming\Python Modules\mypackage\module1.py", line …
Run Code Online (Sandbox Code Playgroud)

python relative-path python-import python-3.x python-packaging

7
推荐指数
2
解决办法
2613
查看次数

为纯 Python 包构建发行版有什么意义?

人们可以将 Python 作为源发行版.tar.gz格式)或构建发行版(轮子格式)来共享。

据我了解,构建发行版的要点是:

  • 节省时间:编译可能非常耗时。我们可以在服务器上执行一次并为许多用户共享。
  • 降低要求:用户不必安装编译器

然而,bdist 文件的这两个参数似乎不适用于纯 python 包。尽管如此,我发现natsort既有 sdist 又有 bdist。以 bdist 格式共享纯 python 包有什么好处吗?

python python-wheel python-packaging

7
推荐指数
1
解决办法
1071
查看次数

如何将Spacy en_core_web_md模型放入Python包中

我正在构建一个 python 包,并且正在使用 Spacy 库和 Spacy 模型 en_core_web_md。无法使用 pip 安装。你可以这样安装

python -m spacy download en_core_web_md
Run Code Online (Sandbox Code Playgroud)

我已将 en_core_web_md 文件夹放入我的 Python 包中。

  • 简单的EDA

    • 初始化.py
    • simple_eda.py
    • en_core_web_md
  • 测试

  • 安装程序.py

  • 自述文件.md

  • 执照

我可以成功安装包,但是当我导入时,它给了我这个错误。

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/shahid/anaconda3/envs/eda_test_6/lib/python3.5/site-packages/simple_nlp/__init__.py", line 1, in <module>
    from simple_nlp.simple_nlp import SimpleNLP
  File "/home/shahid/anaconda3/envs/eda_test_6/lib/python3.5/site-packages/simple_nlp/simple_nlp.py", line 22, in <module>
    nlp = spacy.load("en_core_web_md")
  File "/home/shahid/anaconda3/envs/eda_test_6/lib/python3.5/site-packages/spacy/__init__.py", line 30, in load
    return util.load_model(name, **overrides)
  File "/home/shahid/anaconda3/envs/eda_test_6/lib/python3.5/site-packages/spacy/util.py", line 175, in load_model
    raise IOError(Errors.E050.format(name=name))
OSError: [E050] Can't find …
Run Code Online (Sandbox Code Playgroud)

python pip pypi spacy python-packaging

7
推荐指数
1
解决办法
6175
查看次数

如何使用 .whl 文件调用 pyspark 代码?

我用诗歌创建了一个轮文件。我正在运行 Spark-submit 命令,但它不起作用。我想我错过了一些东西

spark-submit --py-files /path/to/wheel
Run Code Online (Sandbox Code Playgroud)

请注意,我也参考了下面的内容,但由于我是 Python 新手,因此没有获得太多详细信息。 如何将 python 包传递给 Spark 作业并使用参数从包中调用主文件

python apache-spark python-wheel pyspark python-packaging

7
推荐指数
1
解决办法
7936
查看次数

pyproject.toml 中“[tool.setuptools.packages] find = {}”的功能

用于为包注册表打包 Python 项目的 GitLab 说明指示用户创建包含以下内容的 pyproject.toml 文件:

[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"

[project]
name = "mypypipackage"
version = "0.0.1"
authors = [
    { name="Example Author", email="author@example.com" },
]
description = "A small example package"
requires-python = ">=3.7"
classifiers = [
   "Programming Language :: Python :: 3",
   "Operating System :: OS Independent",
]

[tool.setuptools.packages]
find = {}
Run Code Online (Sandbox Code Playgroud)

find = {}谁能解释一下底部的功能是什么?GitLab 指南没有解释,我似乎找不到任何相关文档。

当然,.toml 文件按照指示工作得很好,但在不[tool.setuptools.packages]完全包含该部分的情况下它似乎也工作得很好。

python setuptools pypi python-packaging

7
推荐指数
1
解决办法
6717
查看次数