首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该怎么做才能在Heroku上使用python-魔术?

我应该怎么做才能在Heroku上使用python-魔术?
EN

Stack Overflow用户
提问于 2018-11-17 13:17:00
回答 1查看 433关注 0票数 1

我正在构建一个使用python-魔术0.4.15的应用程序。在我的本地机器上,python-魔术-bin 0.4.15工作起来很有魅力,但我想让它在Heroku上工作。首先,我只是想在Heroku-CI考试中通过考试。我把这个包添加到我的requirements.txt

代码语言:javascript
复制
python-magic==0.4.15

把它推给了Heroku。并正确安装:

代码语言:javascript
复制
-----> Installing requirements with pip
       Collecting python-magic==0.4.15 (from -r /app/requirements.txt (line 7))
         Downloading https://files.pythonhosted.org/packages/42/a1/76d30c79992e3750dac6790ce16f056f870d368ba142f83f75f694d93001/python_magic-0.4.15-py2.py3-none-any.whl
       Installing collected packages: python-magic
       Successfully installed python-magic-0.4.15

但随后它就像这样崩溃了:

代码语言:javascript
复制
+ python manage.py collectstatic --no-input
Traceback (most recent call last):
  File "manage.py", line 20, in <module>
    execute_from_command_line(sys.argv)
  File "/app/.heroku/python/lib/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "/app/.heroku/python/lib/python3.6/site-packages/django/core/management/__init__.py", line 357, in execute
    django.setup()
  File "/app/.heroku/python/lib/python3.6/site-packages/django/__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/app/.heroku/python/lib/python3.6/site-packages/django/apps/registry.py", line 120, in populate
    app_config.ready()
  File "/app/.heroku/python/lib/python3.6/site-packages/django/contrib/admin/apps.py", line 24, in ready
    self.module.autodiscover()
  File "/app/.heroku/python/lib/python3.6/site-packages/django/contrib/admin/__init__.py", line 26, in autodiscover
    autodiscover_modules('admin', register_to=site)
  File "/app/.heroku/python/lib/python3.6/site-packages/django/utils/module_loading.py", line 47, in autodiscover_modules
    import_module('%s.%s' % (app_config.name, module_to_search))
  File "/app/.heroku/python/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/app/core/admin.py", line 8, in <module>
    from .forms import CrmDataUploadForm
  File "/app/core/forms.py", line 3, in <module>
    from magic import magic
ImportError: cannot import name 'magic'

我尝试添加NetsoftHoldings/heroku- buildpack -魔术构建包,我可以看到它正在被下载:

代码语言:javascript
复制
-----> Fetching https://github.com/NetsoftHoldings/heroku-buildpack-magic.git buildpack...
       buildpack downloaded

pip软件包正在正确安装:

代码语言:javascript
复制
-----> Installing requirements with pip
       Collecting python-magic==0.4.15 (from -r /app/requirements.txt (line 7))
         Downloading https://files.pythonhosted.org/packages/42/a1/76d30c79992e3750dac6790ce16f056f870d368ba142f83f75f694d93001/python_magic-0.4.15-py2.py3-none-any.whl
       Installing collected packages: python-magic
       Successfully installed python-magic-0.4.15

但是,在构建包中似乎出现了一个错误(我在这里猜测):

代码语言:javascript
复制
-----> libmagic app detected
bash: /tmp/buildpacks/27353aa3b5edb2f8361186206e863f5d481f02805d02f0efdec439f3d30349a4fbdad2951af33a0492023fb0d90d26dafda6fe76f1b2d34f68564a98545f7022/export: No such file or directory
RootDir: /tmp/buildpacks/ba9220b10d71b7b776013869da2c820ccb5c0f1733268ae2515b3b8ad5edd44d2016d1119bce32d1660fbd84da179891a404dcc57df043b9d82e22725739b072
BuildDir: /app
HOME: /app
Build list
config
Home list
config

它最终会像这样崩溃:

代码语言:javascript
复制
+ python manage.py collectstatic --no-input
Traceback (most recent call last):
  File "manage.py", line 20, in <module>
    execute_from_command_line(sys.argv)
  File "/app/.heroku/python/lib/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "/app/.heroku/python/lib/python3.6/site-packages/django/core/management/__init__.py", line 357, in execute
    django.setup()
  File "/app/.heroku/python/lib/python3.6/site-packages/django/__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/app/.heroku/python/lib/python3.6/site-packages/django/apps/registry.py", line 120, in populate
    app_config.ready()
  File "/app/.heroku/python/lib/python3.6/site-packages/django/contrib/admin/apps.py", line 24, in ready
    self.module.autodiscover()
  File "/app/.heroku/python/lib/python3.6/site-packages/django/contrib/admin/__init__.py", line 26, in autodiscover
    autodiscover_modules('admin', register_to=site)
  File "/app/.heroku/python/lib/python3.6/site-packages/django/utils/module_loading.py", line 47, in autodiscover_modules
    import_module('%s.%s' % (app_config.name, module_to_search))
  File "/app/.heroku/python/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/app/core/admin.py", line 8, in <module>
    from .forms import CrmDataUploadForm
  File "/app/core/forms.py", line 3, in <module>
    from magic import magic
ImportError: cannot import name 'magic'

然后我尝试添加heroku-community/apt构建包和一个包含以下内容的Aptfile:

代码语言:javascript
复制
libmagic-dev
libmagic1

我可以看到它们被正确安装:

代码语言:javascript
复制
-----> Fetching .debs for libmagic-dev
       Reading package lists...
       Building dependency tree...
       0 upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 23 not upgraded.
       Need to get 79.4 kB of archives.
       After this operation, 0 B of additional disk space will be used.
       Get:1 http://archive.ubuntu.com/ubuntu bionic-security/main amd64 libmagic-dev amd64 1:5.32-2ubuntu0.1 [79.4 kB]
       Fetched 79.4 kB in 0s (222 kB/s)
       Download complete and in download only mode
W: --force-yes is deprecated, use one of the options starting with --allow instead.
-----> Fetching .debs for libmagic1
       Reading package lists...
       Building dependency tree...
       0 upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 23 not upgraded.
       Need to get 68.4 kB of archives.
       After this operation, 0 B of additional disk space will be used.
       Get:1 http://archive.ubuntu.com/ubuntu bionic-security/main amd64 libmagic1 amd64 1:5.32-2ubuntu0.1 [68.4 kB]
       Fetched 68.4 kB in 0s (199 kB/s)
       Download complete and in download only mode
W: --force-yes is deprecated, use one of the options starting with --allow instead.
-----> Installing libmagic1_1%3a5.32-2ubuntu0.1_amd64.deb
-----> Installing libmagic-dev_1%3a5.32-2ubuntu0.1_amd64.deb

但是,应用程序仍然失败,但也有相同的错误:

代码语言:javascript
复制
+ pip install -r requirements-test.txt
Requirement already satisfied: coverage==4.5.1 in ./.heroku/python/lib/python3.6/site-packages (from -r requirements-test.txt (line 1))
Requirement already satisfied: selenium==3.141.0 in ./.heroku/python/lib/python3.6/site-packages (from -r requirements-test.txt (line 2))
Requirement already satisfied: urllib3 in ./.heroku/python/lib/python3.6/site-packages (from selenium==3.141.0->-r requirements-test.txt (line 2))
You are using pip version 9.0.2, however version 18.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
+ python manage.py collectstatic --no-input
Traceback (most recent call last):
  File "manage.py", line 20, in <module>
    execute_from_command_line(sys.argv)
  File "/app/.heroku/python/lib/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "/app/.heroku/python/lib/python3.6/site-packages/django/core/management/__init__.py", line 357, in execute
    django.setup()
  File "/app/.heroku/python/lib/python3.6/site-packages/django/__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/app/.heroku/python/lib/python3.6/site-packages/django/apps/registry.py", line 120, in populate
    app_config.ready()
  File "/app/.heroku/python/lib/python3.6/site-packages/django/contrib/admin/apps.py", line 24, in ready
    self.module.autodiscover()
  File "/app/.heroku/python/lib/python3.6/site-packages/django/contrib/admin/__init__.py", line 26, in autodiscover
    autodiscover_modules('admin', register_to=site)
  File "/app/.heroku/python/lib/python3.6/site-packages/django/utils/module_loading.py", line 47, in autodiscover_modules
    import_module('%s.%s' % (app_config.name, module_to_search))
  File "/app/.heroku/python/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/app/core/admin.py", line 8, in <module>
    from .forms import CrmDataUploadForm
  File "/app/core/forms.py", line 3, in <module>
    from magic import magic
ImportError: cannot import name 'magic'

有什么办法让巨蟒魔法在Heroku上工作吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-17 15:21:01

导入magic模块的正确方法是:

代码语言:javascript
复制
import magic

代码语言:javascript
复制
from magic import magic

Python-魔术只提供了一个magic模块,python也这样做。问题是python有一个名为magic.magic的包,它类似于内部细节,因此,后一个示例在python中工作,而不是python-魔术。

从python-魔术文档:

代码语言:javascript
复制
>>> import magic
>>> magic.from_file("testdata/test.pdf")
'PDF document, version 1.2'
>>> magic.from_buffer(open("testdata/test.pdf").read(1024))
'PDF document, version 1.2'
>>> magic.from_file("testdata/test.pdf", mime=True)
'application/pdf'
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53351628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档