我正在尝试制作自己的使用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运行脚本,那么一切都会正常工作,但是正是这种封装使我不寒而栗。
我有一个结构类似的自定义项目包:
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) 我最近在我的.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)?
我目前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个单独的文件
我在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相当容易),而是通过避免在根目录中放置其他文件夹来保持文件结构更整洁。
在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'?
我写了一个包含'标准'最小结构的包.它看起来像这样:
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 …
我有以下包结构:
.
??? 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)
现在我看到了这条消息:
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
我应该怎么做?
(我也可以更改包的结构,但我想将测试数据保留在测试中 - 运行应用程序不需要)
我有以下代码
try:
from mypackage.optional.xxx import f1, f2
except ImportError:
from mypackage.optional.yyy import f1, f2
Run Code Online (Sandbox Code Playgroud)
模块xxx和yyy提供相同的功能,但功能的编码非常不同,接受不同的输入类型并基于不同的外部库(这是我的包的可选依赖项)。
不幸的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)
我该如何解决这个问题?有条件地导入相同功能(即具有相似签名的相同功能名称)的最佳方法是什么?
简而言之
我尝试编译一个名为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 ×10
python-packaging ×10
pip ×3
python-3.x ×2
argparse ×1
aws-lambda ×1
command-line ×1
cython ×1
cythonize ×1
mypy ×1
opencv ×1
py2exe ×1
pycharm ×1
pypi ×1
python-2.x ×1
setuptools ×1
type-hinting ×1
unit-testing ×1
windows ×1