【问题标题】:Python: Is it possible to create a package out of multiple external libraries?Python:是否可以从多个外部库中创建一个包?
【发布时间】:2016-07-30 12:36:32
【问题描述】:

在过去的几天里,这个问题一直让我发疯。

所以基本上,我正在尝试将纯 Python 项目移植到适当的 PyCharm 项目。这是为了从根本上提高代码质量和项目结构。

我希望它就像创建一个虚拟环境来容纳所有东西一样简单,但事实并非如此。该项目最终将由多个开发人员同时开发,使用 Git 作为源代码控制,并且默认库将被修改。我认为这意味着最终应该由 Git 跟踪库。据我所知,Virtualenv 在这里不应该有帮助,因为它不能在系统之间移植(或者至少仍在测试中)。

这个项目将来也会被部署到 Centos 服务器上。

所以我能想到的唯一成功实现这一目标的计划就是简单地将所有库(使用 pip install -t Libraries <ExampleLibrary> 完成)放入一个文件夹中,其中包含 __init__.py,然后使用它们从其他 python 文件作为 Pycharm 项目中的一个包。

这可能/推荐吗?我尝试了各种方法来引用这些库,但它们在运行时都不起作用。不知何故,当库中的文件从他们自己的包中导入其他内容时,会引发 ImportError 说没有这样的模块。

也会接受任何其他建议。

使用 Pycharm 社区版。

编辑:在好好休息一晚后,我认为问题的症结实际上只是项目组织。在我将它移植到 Pycharm 之前,该项目按预期工作,但是根目录中的所有 python 文件和根目录中的子文件夹中的库,每个项目文件都具有相同的样板代码: import os, sys absFilePath = os.path.dirname(os.path.abspath(__file__)); sys.path.insert(1, absFilePath + "/lib")

我希望通过使用 Pycharm 来帮助我充实包,我可以避免重复的样板代码。

【问题讨论】:

  • 为什么要修改依赖项?这通常会给您带来问题...您可以从它们继承并添加/修改要更改的功能吗?如果您绝对需要供应商的东西,请查看 requests 库,该库在其 repo 中有自己的几个包的版本。 (如果你要修改依赖项,它们必须从一开始就在 git 中!)
  • 我的修改只是一些库函数中的单行代码,我认为它们不应该破坏结构?您从库中继承的建议是我没有考虑过的,但我不知道如果我朝着这个方向前进,我将如何做出我想做的改变。是的,在将项目移植到 Pycharm 之前的最初计划是将这些库放在项目文件夹旁边的 git repo 中。但是现在我只想有一个更好的项目结构,因为以前,所有东西都在根文件夹中,这使得事情变得混乱。
  • 如果您的代码质量不是很好,您可能想了解如何修复那个。添加一个 IDE 不可能神奇地解决你的任何问题,即使是像 Pycharm 这样好的问题。
  • 我是否正确地阅读了您正在尝试做的事情除了使用您的普通pip install'd 库?因为……不要那样做,那是个可怕的主意。
  • 好吧,我来自 Java 背景,所以我仍然非常坚持他们的命名约定。至少 Pycharm 强制执行 PEP-8,我认为这很好。我使用了 pip -t libs install LibraryX,我猜 pip 将库安装到相对于 shell 的特定文件夹中,而不是主要的 Python 站点包库。这不是一个好习惯?

标签: python git pycharm packages


【解决方案1】:

注意:不是完整的解决方案。

添加下面的模板代码会强制包含代码的文件与 libs 文件夹位于同一目录中。

对于 Pycharm,我所要做的就是将 libs 文件夹标记为源文件夹。即使在文件中添加了模板代码,修改后的库仍然可以正常工作。

对于 Python Shell,仍然需要此模板代码:

import os
import sys

absFilePath = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(1, absFilePath + "/lib")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    • 2015-12-17
    • 2012-01-03
    • 2023-04-09
    • 2015-07-14
    • 1970-01-01
    相关资源
    最近更新 更多