标签: python-packaging

如何在python软件包中添加cv2作为要求?

我正在尝试制作自己的使用OpenCV Python模块的软件包cv2。但是,使用PyCharm时,它会警告

不符合包装要求。

我怀疑这是因为我使用了推荐的复制/粘贴cv2.pyd到python目录中的方法。请注意,pip install cv2 这不起作用。

引入此软件包时,什么方法可以确保满足要求?

编辑:

我的setup.py文件如下

from setuptools import setup

setup(name='image_processing',
      version='0.1',
      install_requires=['numpy', 'scipy', 'cv2'],
      description='Collection of useful image processing functions',
      url='',
      author='Bill',
      license='MIT',
      packages=['image_processing'],
      zip_safe=False)
Run Code Online (Sandbox Code Playgroud)

这是尝试打包我的代码时出现错误的地方。通常我导入numpy或cv2没有问题。我通过上述方法使用pip和cv2安装了Numpy。如果我只是使用cv2运行脚本,那么一切都会正常工作,但是正是这种封装使我不寒而栗。

python opencv pycharm python-packaging

5
推荐指数
1
解决办法
3602
查看次数

带有子模块的python安装包

我有一个结构类似的自定义项目包:

 package-dir/
     mypackage/
         __init__.py
         submodule1/
              __init__.py
              testmodule.py
         main.py
     requirements.txt
     setup.py
Run Code Online (Sandbox Code Playgroud)

使用cd package-dir随后$pip install -e .pip install .所建议蟒包装只要我从访问包package-dir

例如 :

 $cd project-dir
 $pip install .
Run Code Online (Sandbox Code Playgroud)

在这一点上这工作:

 $python -c 'import mypackage; import submodule1'
Run Code Online (Sandbox Code Playgroud)

但这不起作用

 $ cd some-other-dir
 $ python -c 'import mypackage; import submodule1'
 Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 ImportError: No module named submodule1
Run Code Online (Sandbox Code Playgroud)

如何安装所有子模块?

另外,如果我检查package-dir/build/lib.linux-x86_64-2.7/mypackage目录,我只会看到立即文件,mypackage/*.py并且没有mypackage/submodule1

setup.py 看起来像:

from setuptools import setup …
Run Code Online (Sandbox Code Playgroud)

python pip setuptools python-install python-packaging

5
推荐指数
1
解决办法
2901
查看次数

为什么我有描述-内容-类型:未知

我最近在我的.egg-info/PKG-INFO: 中发现了一个新的元数据Description-Content-Type

当我运行时:

python setup.py egg_info
Run Code Online (Sandbox Code Playgroud)

我得到:

Description-Content-Type: UNKNOWN
Run Code Online (Sandbox Code Playgroud)

例如,我怎么知道我使用了 Markdown ( text/markdown)?

python python-packaging

5
推荐指数
1
解决办法
169
查看次数

使用py2exe的多个控制台命令

我目前setup.py有三个console_scripts条目:

console_scripts=[
    ‘myapp-dev=bin/run:dev',
    ‘myapp=bin/run:prod',
    ‘myapp-cmd-line=bin/run:cmd'
]
Run Code Online (Sandbox Code Playgroud)

run.py 包含这些的简单函数:

#!/usr/bin/env python

myapp = App()

def dev():
    myapp.run(mode='dev')

def prod():
    myapp.run()

def cmdline():
    myapp.run(mode='cmd')
Run Code Online (Sandbox Code Playgroud)

有没有办法可以.exe为上面的每一个创建3个单独的文件

python windows py2exe python-2.x python-packaging

5
推荐指数
0
解决办法
59
查看次数

将Python依赖项打包在AWS Lambda的子目录中

我在serverlesscode.com 遇到了有关为AWS Lambda构建Python 3应用程序的文章,文章建议使用pip(或pip3)在/ vendored子目录中安装依赖项。我喜欢这个主意,因为它可以使文件结构保持整洁,但是在实现它方面存在一些问题。

我正在使用Serverless Framework,并且我的模块以正常方式导入到我的代码中,例如 from pynamodb.models import Model

我已经使用该命令pip install -t vendored/ -r requirements.txt在子目录中安装了我的各种依赖项(按requirements.txt),这似乎按预期工作了-我可以看到子目录中安装了所有模块。

但是,当调用该函数时,出现错误Unable to import module 'handler': No module named 'pynamodb'(其中pynamodb是已安装的模块之一)。

我可以通过将pip安装更改为项目根目录(即不在/ vendored文件夹(pip install -t ./ -r requirements.txt)中)来解决此错误。这将安装完全相同的文件。

我必须缺少一个指向子文件夹的配置,但是Googling并未透露我是否需要以其他方式导入模块,或者是否需要更改其他全局配置。

总结一下:如何使用Pip在项目的子文件夹中安装依赖项?

编辑:注意到tkwargs关于使用无服务器插件进行打包的好建议,例如,如果没有venv,那么了解如何做到这一点仍然会很好。主要目的不是专门为了简化打包(使用pip相当容易),而是通过避免在根目录中放置其他文件夹来保持文件结构更整洁。

python pip aws-lambda serverless-framework python-packaging

5
推荐指数
1
解决办法
2512
查看次数

pypi依赖项中的“额外”是什么?

requires_distpypi的json响应中,给出:

requires_dist : [
    "bcrypt; extra == 'bcrypt'",
    "argon2-cffi (>=16.1.0); extra == 'argon2'"
]
Run Code Online (Sandbox Code Playgroud)

谁能说清楚每个相关的第二份声明,extra == 'bcrypt'extra == 'argon2'

python pip pypi python-packaging

5
推荐指数
1
解决办法
388
查看次数

包的结构,也可以作为命令行脚本运行

我写了一个包含'标准'最小结构的包.它看起来像这样:

my_package/
    my_package/
        __init__.py
    setup.py
Run Code Online (Sandbox Code Playgroud)

__init__.py 包含一个类,因此可以像人们期望的那样简单地导入和使用.

但是,代码确实有助于以命令行方式使用,例如

python my_package --arg1 "I like bananas."
Run Code Online (Sandbox Code Playgroud)

起初,我刚刚进行了if __name__ == '__main__'检查,__init__然后使用argparse.这有效,但它不漂亮,因为它意味着你从命令行调用它,如下所示:

python my_package/__init__.py --arg1 "I like bananas."
Run Code Online (Sandbox Code Playgroud)

根据我的阅读,这是一个__main__.py文件进入的地方,它将作为文件夹内的默认脚本执行(类似于index.html网站上的文件).我的想法是然后简单地导入__init__.py,运行argparse并将参数提供给类构造函数.像这样:

import argparse
from __init__ import MyClass

parser = argparse.ArgumentParser()
parser.add_argument("--arg1", help="Some dummy value")

args = parser.parse_args()
my_class = MyClass(**vars(args))
my_class.do_stuff()
Run Code Online (Sandbox Code Playgroud)

这是类似的包应该如何构建,还是有更好的方法?


上面的工作, PyCharm告诉我,in __main__.py __init__是一个未解决的参考.同为MyClass对进口线.当我使用.__init__(带点)时,警告消失,但代码不再起作用,给我一个ImportError: attempted relative import with no known parent …

python command-line argparse python-3.x python-packaging

5
推荐指数
1
解决办法
230
查看次数

如何在 Python 的测试中获取文件?

我有以下包结构:

.
??? my_app
?   ??? app.py
?   ??? cli.py
?   ??? db.py
?   ??? __init__.py
??? setup.py
??? tests
?   ??? data
?   ?   ??? foobar.gz
?   ??? test_app.py
?   ??? test_database.py
??? tox.ini
Run Code Online (Sandbox Code Playgroud)

在 内test_app.py,我这样做:

import pkg_resources
path = '../tests/data/foobar.gz'
full_path = pkg_resources.resource_filename(__name__, path)
Run Code Online (Sandbox Code Playgroud)

现在我看到了这条消息:

/usr/local/lib/python3.7/site-packages/pkg_resources/__init__.py:1145:
  DeprecationWarning: Use of .. or absolute path in a resource path
  is not allowed and will raise exceptions in a future release.
self, resource_name
Run Code Online (Sandbox Code Playgroud)

我应该怎么做?

(我也可以更改包的结构,但我想将测试数据保留在测试中 - 运行应用程序不需要)

python unit-testing python-3.x python-packaging

5
推荐指数
1
解决办法
875
查看次数

条件导入的 mypy“不兼容导入”错误

我有以下代码

try:
    from mypackage.optional.xxx import f1, f2
except ImportError:
    from mypackage.optional.yyy import f1, f2
Run Code Online (Sandbox Code Playgroud)

模块xxxyyy提供相同的功能,但功能的编码非常不同,接受不同的输入类型并基于不同的外部库(这是我的包的可选依赖项)。

不幸的mypy是抱怨:

error: Incompatible import of "f1" (imported name has type "Callable[[Arg(Any, 'yyyarg1')], Any]", local name has type "Callable[[Arg(Any, 'xxxarg1')], Any]")
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?有条件地导入相同功能(即具有相似签名的相同功能名称)的最佳方法是什么?

python type-hinting python-import mypy python-packaging

5
推荐指数
1
解决办法
674
查看次数

包的 Cython C 级接口:找不到 *.pxd 文件

简而言之

我尝试编译一个名为extension2cimportsextension从自创建包中导入文件的 cython 扩展。构建时extension2,我收到了extension.pxd未找到的错误,尽管此文件正好位于指定的路径中。

细节

我正在构建两个涉及 cython 的包,一个包A和一个B依赖于A. A是命名空间包的子包nsp。也就是说,文件夹结构如下所示:

??? nsp
?   ??? A
|       ??? extension.pxd
|       ??? extension.pyx
?       ??? __init__.py
??? setup.py
Run Code Online (Sandbox Code Playgroud)

在这里,setup.py内容如下:

from setuptools import setup
from setuptools.extension import Extension

# factory function
def my_build_ext(pars):
    # import delayed:
    from setuptools.command.build_ext import build_ext as _build_ext

    # include_dirs adjusted: 
    class build_ext(_build_ext):
        def finalize_options(self):
            _build_ext.finalize_options(self)
            # Prevent numpy from thinking …
Run Code Online (Sandbox Code Playgroud)

python cython python-extensions python-packaging cythonize

5
推荐指数
1
解决办法
512
查看次数