开源改变世界

正确的 python 配置,使用 setuptools #964

推推 grbl 3年前 (2023-02-02) 263次浏览
关闭
petmakris 打开了这个问题 2018 年 9 月 12 日 · 24条评论
关闭

正确的 python 配置,使用 setuptools#964

petmakris 打开了这个问题 2018 年 9 月 12 日 · 24条评论

注释

正确的 python 配置,使用 setuptools #964

我认为这个项目需要适当的配置,

a 至少 asetup.py参考所有项目依赖项。

我应该去吗?你接受公关吗?

谢谢

正确的 python 配置,使用 setuptools #964

好主意!!!
每次我有问题让 BCNC 正常工作。
现在我的相机又出问题了!

正确的 python 配置,使用 setuptools #964
合作者

@petmakris是在 python 中自动安装依赖项的标准方法吗?
如果是这样,我会很乐意接受这样的 PR。

正确的 python 配置,使用 setuptools #964 哈维 补充道 发布工程 bCNC 如何从开发人员到用户(以及返回)标签 2018 年 10 月 30 日
正确的 python 配置,使用 setuptools #964 Harvie 将此添加到 0.9.15里程碑 2018 年 11 月 14 日
正确的 python 配置,使用 setuptools #964
合作者

@petmakris你能创建文件吗?我很感兴趣在下一个版本中有这个。

正确的 python 配置,使用 setuptools #964

看着它。

正确的 python 配置,使用 setuptools #964
作者
宠物马克里斯 评论了 2018 年 11 月 19 日  

正确构建 python 项目意味着您为项目配置 setuptools,以便您声明

  • 依赖关系
  • 入口点(可执行脚本)
  • 测试
  • 元数据

这样做允许将您的软件作为(通常)轮子分发,并允许使用简单的命令进行安装

从 PyPI 安装

pip install bCNC

从 wheel 文件安装

pip install bCNC-{wheel_naming_convetions}.whl

此命令将(获取 bCNC 轮并)安装 bCNC 的依赖项,并将使 bCNC 可执行文件在系统范围内可用。

这也使升级/卸载变得简单,并允许在沙箱中进行开发,
使用virtualenv多个版本的 bCNC 可以避免in-progress弄乱
系统范围内安装的 python 模块。

文件的结构setup.py看起来像(具有适当的依赖关系)

from setuptools import setup, find_packages

setup(
    name = "bCNC",
    version = "0.1",
    packages = find_packages(),
    author = "Author",
    install_requires = [
        'cherrypy==18.0.1',
        'jinja2==2.10',
        'requests==2.20.1',
        'mysql-connector-python==8.0.13',
        'simplejson==3.16.0',

        # https://google-auth.readthedocs.io/en/latest/index.html
        'google-auth==1.6.1'
    ],

    entry_points = {
        'console_scripts': [
            'bCNC = {package}.{module}:{main_function}',

        ]
    }
)

并记录在这里

https://setuptools.readthedocs.io/en/latest/setuptools.html

前段时间我在这里写了一篇关于构建 python 项目的教程

https://petmakris.github.io/structuring-a-python-project

setup.py将创建一个entrypoint名为 . 的可执行文件(或更多)bCNC

虽然完全可行并且我们应该去做,但 bCNC 项目目前在使用 python 包和导入方面结构不是很好,这需要一些时间。

或者,如果只关心依赖项而不关心分发,则该requirements.text文件可用于声明需要哪些依赖项,以及可以通过以下方式安装的依赖项

pip install -r requirements.text

requirements.text文件看起来像

BeautifulSoup==3.2.0
Django==1.3
Fabric==1.2.0
Jinja2==2.5.5
PyYAML==3.09
Pygments==1.4
SQLAlchemy==0.7.1
South==0.7.3
amqplib==0.6.1
anyjson==0.3

但这是为了本地开发,对分发没有帮助,我们应该去setup.py

可以转储当前安装的模块,pip freeze但这将是用户系统中安装的所有模块的详尽列表(活动 python 安装),而且无法卸载它们。

实际上两者setup.pyrequirements,text在项目中使用,第一个声明所需的 deps 和 dist 元数据,而后者配置本地开发环境,即requirements.text您可能包含测试所需的包但不应该是分发依赖项(requirements.textsetup.py/dependencies 的超集)

我们不要将它包含在下一个版本中,因为快速重组项目似乎非常复杂(所有导入都必须更改,要创建 pacakes 等等? ).

正确的 python 配置,使用 setuptools #964
合作者
哈维 评论了 2018 年 11 月 19 日  

pip 安装 bCNC

哇!我真的很想在下一个版本之前这样做!

这看起来也是很好的来源:https ://packaging.python.org/tutorials/packaging-projects/

我已经在 PyPi 上创建了项目:https ://pypi.org/project/bCNC/

正确的 python 配置,使用 setuptools #964
合作者
哈维 评论了 2018 年 11 月 19 日  

好的。我刚刚开始研究它并且已经遇到问题:
tkinter并且python-imaging-tk不能作为 pip 包使用,因此无法自动安装!有办法解决这个问题吗?否则它有点违背了拥有这种自动化的意义……

Harvie 添加了引用此问题的提交 2018 年 11 月 19 日

正确的 python 配置,使用 setuptools #964
合作者

虽然完全可行并且我们应该去做,但 bCNC 项目目前在使用 python 包和导入方面结构不是很好,这需要一些时间。

是否足以将所有内容移动到bCNC子目录,只在外面留下 setup.py、LICENSE 和 README.md?

正确的 python 配置,使用 setuptools #964
作者
宠物马克里斯 评论了 2018 年 11 月 19 日  

  1. 在 tkinter 和 python-imagin-tk 上我没有意见我必须检查发生了什么

  2. 在包装上,是的,bCNC 作为一个名字是完美的。在 bCNC/ 和每个子目录中的每个目录中,您需要添加一个(__init__.py这使得其他 .py 可以从中导入,并且 find_packages() 可以找到它。)folderpython module

正确的 python 配置,使用 setuptools #964
作者
宠物马克里斯 评论了 2018 年 11 月 19 日  

tkinter不是项目依赖项,它包含在 python 中(至少在我刚刚检查过的 python3 中)。

但是因为python-imaging-tk我不知道这是什么,它似乎是 PIL(python 成像库)的一部分或相同的并且似乎被 Pillow 取代(https://pillow.readthedocs.io/en/5.3.x/ ).

也许是相同的 API 和无缝过渡

正确的 python 配置,使用 setuptools #964

你能先检查一下你需要的 python dep 是否是 PIL 吗?

PIL (1.1.6)                 - Python Imaging Library

您最初是如何安装 python-imaging-tk 的?

正确的 python 配置,使用 setuptools #964
作者
宠物马克里斯 评论了 2018 年 11 月 19 日  

给个提示

执行以下操作以检查您的依赖项是否适用于您的项目。

在 bCNC 根文件夹中创建一个虚拟环境

python -m venv venv # python 3

或者

pip install virtualenv # python 2
virtualenv venv

获取 virtualenv

source venv/bin/activate # linux
./venv/Scripts/activate # windows

现在如果你做 a你会发现除了and (and maybe )pip freeze没有其他部门pipsetuptoolswheel

现在,使用你做的这个干净的 virtualenv

pip install -e .

(注意dot之后-e)。通过这种方式,您可以在 setup.py 和 bCNC 开发项目中定义的 virtualenv 中安装所有依赖项(对 bCNC 文件的每个更改都立即可用venv,在 pip 列表中它显示它链接到您的 bCNC 文件夹)

这样你就可以测试配置的 depssetup.py是否足以启动 bCNC

正确的 python 配置,使用 setuptools #964
合作者

你能先检查一下你需要的 python dep 是否是 PIL 吗?

是的。这是。准确地说,我使用 Pillow,它是 PIL 叉子。但我认为它们是可以互换的。

我已经设置了虚拟环境并 pip2 安装了以下软件包:

        install_requires = [
                'pyserial==3.4',
                'numpy==1.15.4',
                'opencv-python==3.4.2.17',
                'Pillow==5.3.0',
        ],

bCNC 现在可以在这个虚拟环境中工作。这是否意味着 tkinter 默认包含在 python 中?

Harvie 向 Harvie/bCNC 添加了引用此问题的提交 2018 年 11 月 19 日

正确的 python 配置,使用 setuptools #964
合作者
哈维 评论了 2018 年 11 月 19 日  

我首先在 PyPI 上构建,但它无法导入其他文件:

pip2 安装 bCNC –upgrade
python2 -m bCNC

Traceback (most recent call last):
  File "/usr/lib64/python2.7/runpy.py", line 174, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/usr/lib64/python2.7/runpy.py", line 72, in _run_code
    exec code in run_globals
  File "/home/harvie/Temp/tst/venv/lib/python2.7/site-packages/bCNC/__main__.py", line 45, in <module>
    import Utils
  File "/home/harvie/Temp/tst/venv/lib/python2.7/site-packages/bCNC/Utils.py", line 13, in <module>
    from log import say
ImportError: cannot import name say

当我更改为时,它会Utils.py得到from log import say修复from lib.log import say。不幸的是,还有更多类似的错误。

我不明白为什么会这样,因为 main.py 中有以下代码

PRGPATH=os.path.abspath(os.path.dirname(__file__))
sys.path.append(os.path.join(PRGPATH, 'lib'))

在我看来,路径被忽略了

正确的 python 配置,使用 setuptools #964
合作者

我已经准备好目录结构,但我仍然无法导入东西。我也有点担心插件之类的东西在这种“python 模块”方法中会如何工作。因为加载插件是基于枚举目录并导入在那里找到的所有文件。不确定是否可以在 python 模块中完成。

正确的 python 配置,使用 setuptools #964
合作者

python2 -m bCNC现在我可以通过在 git 目录中输入来启动 bCNC 。但是用pip install安装的时候还是不行。诡异的。

正确的 python 配置,使用 setuptools #964
合作者
哈维 评论了 2018 年 11 月 19 日  

我需要向 MANIFEST.in 添加一些文件,现在一切都使用 pip 安装和启动。但是它仍然给我很多错误。

你可以试试:

pip2 install bCNC
pip2 install bCNC --upgrade
python2 -m bCNC
正确的 python 配置,使用 setuptools #964
合作者

好的,现在一切都运行起来没有抛出错误,但是 bCNC 的某些部分根本不起作用。例如:帮助窗口中的图像或 slicemesh 插件的保存设置。但它不会给出任何错误,因此很难修复。为什么会发生这种情况的任何想法?

正确的 python 配置,使用 setuptools #964
合作者

@petmakris你能试试模块版本吗?我需要一些人来测试 bCNC 的模块版本。

当我将 bCNC 作为 python 模块运行时,没有任何插件可以保存/加载它的配置。当我直接运行 bCNC 时,它可以工作。没有错误显示。这怎么可能?你能看看这个吗?

正确的 python 配置,使用 setuptools #964
合作者

顺便说一句,我使用 ArchLinux 进行开发,但我刚刚尝试使用 pip2 install 安装 Ubuntu 18.04.1 LTS 和 bCNC,没有任何问题。OTOH 在 Ubuntu 14.04.5 LTS 上,由于 OpenCV 的一些问题或其他原因,它没有安装……但我仍然认为能够使用单个命令安装到最新的 Ubuntu 是非常酷的。

正确的 python 配置,使用 setuptools #964
合作者
哈维 评论了 2018 年 11 月 20 日  

我想我正在做某事。我已将以下调试消息添加到Utils.py

config    = ConfigParser.ConfigParser()
print "new-config", __name__, config

当我将 bCNC 作为模块运行时,它会创建两个配置解析器实例:

[harvie@anemophobia bCNC]$ python2 -m bCNC
new-config bCNC.Utils <ConfigParser.ConfigParser instance at 0x7fcca1177908>
new-config Utils <ConfigParser.ConfigParser instance at 0x7fcca0f94368>

当我直接运行它时,它只会创建该配置解析器的单个实例:

[harvie@anemophobia bCNC]$ ./bCNC/bCNC
new-config Utils <ConfigParser.ConfigParser instance at 0x7faf2b9447e8>

那是因为在不同的__name__. 一次bCNC.Utils又一次Utils。我不知道如何解决这个问题。配置文件代码似乎一团糟,因为它使用在整个项目中共享的全局变量。

正确的 python 配置,使用 setuptools #964
作者
宠物马克里斯 评论了 2018 年 11 月 20 日  

真诚的 ^2 道歉,我不会很快检查出来,努力工作:(

不过,您所做的一切都朝着正确的方向发展。这种构建 python 的方法是唯一的方法(而不仅仅是推荐的方法),它会揭示将来会导致问题的问题。

正确的 python 配置,使用 setuptools #964
合作者

安装工具已实施。配置是单独的问题。我将关闭它并在#1053中跟踪它