Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python GeoJango地理异常错误_Python_Django_Homebrew_Geodjango - Fatal编程技术网

Python GeoJango地理异常错误

Python GeoJango地理异常错误,python,django,homebrew,geodjango,Python,Django,Homebrew,Geodjango,正在尝试在我的机器上安装GeoDjango。我对Python真的是个新手,被带到一个对其他团队成员来说非常棘手的项目中。我使用brew安装了Python 2.7和GEOS,并运行PSQL 9.2.4,但在尝试运行Web服务器时,不断出现此错误: __import__(name) File "/Users/armynante/Desktop/uclass-files/uclass-env/lib/python2.7/site packages/django/contrib/gis/geometry

正在尝试在我的机器上安装GeoDjango。我对Python真的是个新手,被带到一个对其他团队成员来说非常棘手的项目中。我使用brew安装了Python 2.7和GEOS,并运行PSQL 9.2.4,但在尝试运行Web服务器时,不断出现此错误:

__import__(name)
File "/Users/armynante/Desktop/uclass-files/uclass-env/lib/python2.7/site
packages/django/contrib/gis/geometry/backend/geos.py", line 1, in <module>
from django.contrib.gis.geos import (
File "/Users/armynante/Desktop/uclass-files/uclass-env/lib/python2.7/site
packages/django/contrib/gis/geos/__init__.py", line 6, in <module>
from django.contrib.gis.geos.geometry import GEOSGeometry, wkt_regex, hex_regex
File "/Users/armynante/Desktop/uclass-files/uclass-env/lib/python2.7/site
packages/django/contrib/gis/geos/geometry.py", line 14, in <module>
from django.contrib.gis.geos.coordseq import GEOSCoordSeq
File "/Users/armynante/Desktop/uclass-files/uclass-env/lib/python2.7/site-
packages/django/contrib/gis/geos/coordseq.py", line 9, in <module>
from django.contrib.gis.geos.libgeos import CS_PTR
File "/Users/armynante/Desktop/uclass-files/uclass-env/lib/python2.7/site-
packages/django/contrib/gis/geos/libgeos.py", line 119, in <module>
_verinfo = geos_version_info()
File "/Users/armynante/Desktop/uclass-files/uclass-env/lib/python2.7/site
packages/django/contrib/gis/geos/libgeos.py", line 115, in geos_version_info
if not m: raise GEOSException('Could not parse version info string "%s"' % ver)
django.contrib.gis.geos.error.GEOSException: Could not parse version info string
"3.4.2-CAPI-1.8.2 r3921"
这是我的解决方案(很明显,它很难看,就像我的英语一样,但很管用)。 问题是versions字符串在正则表达式中有一个不需要的空白

错误显示:

GEOSException:无法分析版本信息字符串“3.4.2-CAPI-1.8.2 r3921”

geos_版本信息警告:

正则表达式应该能够解析版本字符串,例如 “3.0.0rc4-CAPI-1.3.3”、“3.0.0-CAPI-1.4.1”或“3.4.0dev-CAPI-1.8.0”

编辑此文件:站点包/django/contrib/gis/geos/libgeos.py

查找功能:geos\u版本信息

并更改此行:

ver=geos\u version().decode()

使用此行:

ver=geos\u version().decode().split(“”)[0]


还有另一个问题,末尾有空格,但没有提供更多信息。这样的版本也与版本正则表达式不匹配,因此,
strip()
-ping该版本可能是一个快速修复的预期行为。在我的例子中,它是:
'3.8.0-CAPI-1.13.1'

从去年3月左右开始,在Django。另见。因此,升级到Django 1.5.4将解决这个问题

在最新的GEOS安装中,上述答案不起作用。。。但这几乎就是问题所在

我更改了geos_version_info()上方的正则表达式: 发件人:

version\u regex=re.compile(r'^(?P(?P\d+)\(?P\d+)(?P\d+))((rc(?P\d+))| dev)?-CAPI-(?P\d+\。\d+。\d+))
将是:

version_regex = re.compile(r'^(?P<version>(?P<major>\d+)\.(?P<minor>\d+)\.(?P<subminor>\d+))((rc(?P<release_candidate>\d+))|dev)?-CAPI-(?P<capi_version>\d+\.\d+\.\d+).*$')
version\u regex=re.compile(r'^(?P(?P\d+)\(?P\d+)(?P\d+))((rc(?P\d+))| dev)?-CAPI-(?P\d+\。\d+。。。。。*$)

请注意添加到正则表达式末尾的。*。

我认为它又被破坏了。我们的FreeBSD服务器最近升级导致此错误:

django.contrib.gis.geos.error.GEOSException:无法分析版本信息字符串“3.6.2-CAPI-1.10.2 4d2925d6”


看起来Django的
libgeos.py
中的正则表达式需要再次更新以解释这种不同的语法。Nachopro的解决方案仍然是一个解决方案。

这可以通过尝试以下方法来解决:

brew交换机geos 3.6.1


对于之前未安装3.6.1的用户:

  • brew取消链接geos
  • 使用
    brew安装安装3.6.1https://raw.githubusercontent.com/Homebrew/homebrew-core/145b22e8330e094ee148861e72e26c03e73d34a1/Formula/geos.rb
  • brew信息地理信息系统
    应显示3.6.1星号:

  • 我通过使用安装PostGIS和Postgres修复了这个问题

  • 安装PostGIS(2.2):brew安装PostGIS
  • 如果版本高于3.6.1,则取消geos链接:brew取消geos链接
  • 安装Geos(3.6.1):brew安装
  • 交换机geos版本(最新版本为3.7.2,Django 1.11.3不支持该版本):brew交换机geos 3.6.1
  • 登录数据库并创建postgis扩展:创建扩展postgis; 测试postgis扩展:选择ST_距离('LINESTRING(-122.3347.606,0.051.5)':地理,'POINT(-21.9664.15)':地理)
  • 检查postgis版本:选择postgis_full_version()
    Brew刚刚发布了geos 3.8.0,这当然再次打破了Django 1.11。 以前的版本3.7.3,现在升级时运行的全新全自动清理非常有用,因此我没有
    brew switch geos 3.7.3

    最后,我使用了解如何查找以前的版本号并提交哈希:

    cd$(brew--前缀)/Homebrew/Library/Taps/Homebrew/Homebrew核心
    git log——公式/geos.rb | less
    #在文件中找到所需的版本,复制其哈希
    brew取消链接geos
    brew安装https://raw.githubusercontent.com/Homebrew/homebrew-core//Formula/geos.rb
    
    在所有这些之后,geos 3.7.3的下载由于某种原因未能通过SHA256校验和验证。。。所以我最终尝试了3.7.2,这确实有效

    目前,在Catalina上重新安装3.7.2的命令如下:

    brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/823b700ab61eeec57f34d50be2cc34a285fb5abc/Formula/geos.rb
    

    如果出于任何原因不能自己编辑网站包,那么这个丑陋的黑客为我做到了,而不必对环境本身采取行动:

    try:
        __import__('django.contrib.gis.geos.libgeos', fromlist=['version_regex'])
    except Exception as e:
        import re
        att = __import__('django.contrib.gis.geos.libgeos', fromlist=['version_regex'])
        setattr(att, 'version_regex', re.compile(
          '^(?P<version>(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<subminor>\\d+))((rc(?P<release_candidate>\\d+))|dev)?-CAPI-(?P<capi_version>\\d+\\.\\d+\\.\\d+)( r\\d+)?( \\w+)?.*$'))
        assert str(type(e)) == "<class 'django.contrib.gis.geos.error.GEOSException'>", str(e)
    

    基本上,我们是在
    sys.modules
    中直接对模块执行操作,而不是试图从另一个导入中获取该模块,这将失败。

    可能是您正在使用的构建的问题。尝试将其更新到更高版本。是的,我以前看过那张票。我现在正在重新安装它,如果不起作用,我会尝试升级到下一个版本。我的mac上也有同样的问题。不知道是什么引起的。如果你解决了,请发布解决方案。我用1.9 GDAL Kyung Khaos包和PSQL1.9重新安装了GEOS,错误消失了,所以很遗憾我无法测试。这对你有用吗,或者这只是一个建议?这对我有用,在ArchLinux更新后,我的django代码被破坏。在这个网站使用的版本中,was ver=geos_version(),谢谢!你是一个救命恩人我犯了给定的错误,我只将python从2升级到3,因为我的代码是用python 3编写的。我的问题解决了。我承认我最初的帖子是基于几个推论,但是现在来看,这不表明修正是在1.4.8中吗?不,那里的正则表达式将与有问题的版本号不匹配。恐怕只有1.5版本可以修复,正如上面@Kirkman14的回答中所提到的,这个版本被破坏了;具有讽刺意味的是,我正在尝试安装的项目是Django 1.5.4,但我在四年前发现的修复程序不是更新版本的libgeos的修复程序。好时光!这对我来说非常有效。但是,标记为接受的答案在我的设置中失败。此wo
    brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/823b700ab61eeec57f34d50be2cc34a285fb5abc/Formula/geos.rb
    
    try:
        __import__('django.contrib.gis.geos.libgeos', fromlist=['version_regex'])
    except Exception as e:
        import re
        att = __import__('django.contrib.gis.geos.libgeos', fromlist=['version_regex'])
        setattr(att, 'version_regex', re.compile(
          '^(?P<version>(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<subminor>\\d+))((rc(?P<release_candidate>\\d+))|dev)?-CAPI-(?P<capi_version>\\d+\\.\\d+\\.\\d+)( r\\d+)?( \\w+)?.*$'))
        assert str(type(e)) == "<class 'django.contrib.gis.geos.error.GEOSException'>", str(e)
    
    import sys
    try:
        import django.contrib.gis.geos.libgeos
    except Exception as e:
        import re
        setattr(sys.modules['django.contrib.gis.geos.libgeos'],'version_regex', re.compile(
            '^(?P<version>(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<subminor>\\d+))((rc(?P<release_candidate>\\d+))|dev)?-CAPI-(?P<capi_version>\\d+\\.\\d+\\.\\d+)( r\\d+)?( \\w+)?.*$'))
        assert str(type(e)) == "<class 'django.contrib.gis.geos.error.GEOSException'>", str(e)