相关疑难解决方法(0)

Python 3中的包不需要__init__.py吗?

我使用的是Python 3.5.1.我在这里阅读了文档和包部分:https://docs.python.org/3/tutorial/modules.html#packages

现在,我有以下结构:

/home/wujek/Playground/a/b/module.py
Run Code Online (Sandbox Code Playgroud)

module.py:

class Foo:
    def __init__(self):
        print('initializing Foo')
Run Code Online (Sandbox Code Playgroud)

现在,在/home/wujek/Playground:

~/Playground $ python3
>>> import a.b.module
>>> a.b.module.Foo()
initializing Foo
<a.b.module.Foo object at 0x100a8f0b8>
Run Code Online (Sandbox Code Playgroud)

同样,现在在家里,超级文件夹Playground:

~ $ PYTHONPATH=Playground python3
>>> import a.b.module
>>> a.b.module.Foo()
initializing Foo
<a.b.module.Foo object at 0x10a5fee10>
Run Code Online (Sandbox Code Playgroud)

实际上,我可以做各种各样的事情:

~ $ PYTHONPATH=Playground python3
>>> import a
>>> import a.b
>>> import Playground.a.b
Run Code Online (Sandbox Code Playgroud)

为什么这样做?我虽然有被需要的__init__.py文件(空的都可以)两种a,并bmodule.py要导入的时候Python的路径指向Playground文件夹?

这似乎已经从Python 2.7改变了:

~ $ PYTHONPATH=Playground …
Run Code Online (Sandbox Code Playgroud)

python package python-3.x

146
推荐指数
5
解决办法
6万
查看次数

获取Python错误"来自:无法读取/ var/mail/Bio"

我正在运行(生物)python脚本,导致以下错误:

from: can't read /var/mail/Bio
Run Code Online (Sandbox Code Playgroud)

看到我的脚本与邮件没有任何关系,我不明白为什么我的脚本在查找/ var/mail.

这里似乎有什么问题?我怀疑它会有所帮助,因为脚本似乎不是问题,但无论如何这里是我的脚本:

from Bio import SeqIO
from Bio.SeqUtils import ProtParam

handle = open("examplefasta.fasta") 
for record in SeqIO.parse(handle, "fasta"): 
    seq = str(record.seq)
    X = ProtParam.ProteinAnalysis(seq)
    print X.count_amino_acids() 
    print X.get_amino_acids_percent() 
    print X.molecular_weight() 
    print X.aromaticity() 
    print X.instability_index() 
    print X.flexibility() 
    print X.isoelectric_point() 
    print X.secondary_structure_fraction()
Run Code Online (Sandbox Code Playgroud)

这里有什么问题?糟糕的python设置?我真的不认为这是剧本.

python

81
推荐指数
4
解决办法
9万
查看次数

使用git子模块导入python项目

(我意识到StackOverflow上有很多关于python相对导入的问题;我怀疑我这样做是错误的;但无论如何都要进行..)

我有一个python项目(mysubmod)组织如下:

/__init__.py
/lib
- /__init__py
- /foobar.py
/models
- /__init__.py
- /hello.py
Run Code Online (Sandbox Code Playgroud)

重要的:

  • /models/hello.py导入lib.foobar
  • /models/hello.py有一个运行一些测试的

然后我有第二个项目(myproj),我已经将mysubmod作为git子模块导入其中; myproj现在组织如下 -

/mysubmod
/scripts
- /__init__.py
- /__test.py
Run Code Online (Sandbox Code Playgroud)

哪里:

  • scripts/test.py导入mysubmod.models.hello

但是,当我从命令行运行/scripts/test.py时,解释器现在抱怨mysubmod/models/hello.py无法再找到lib.foobar.

刷新.

更改了mysubmod/models/hello.py,因此它现在导入..lib.foobar

现在我可以毫无怨言地运行/scripts/test.py,但我不能再从命令行运行任何submod脚本作为文件; 我只能使用python -m选项将它们作为模块运行.

此外,我不能再单独运行submod项目文件,即使使用-m选项,因为解释器抱怨"尝试相对导入超出顶级包"; 我必须上一个目录级别,即只能从myproj根目录运行mysubmod(其中mysubmod作为根级别目录).

这一切似乎都令人不满意.我希望能够:

  • 使用git子模块将mysubmod导入到myproj中,以便它"正常工作"
  • 继续能够独立开发mysubmod(即将脚本作为文件而不是模块运行)

有没有人对如何做到这一点?关于git子模块和python的最佳实践的任何看法?

谢谢.

python

5
推荐指数
2
解决办法
3400
查看次数

Pycharm 从 Git 子模块导入

我在 Pycharm 中有一个 python 项目,其中有一个嵌套的 Git 子模块。这是文件夹结构:

my-git-repo
    git-submodule-repo
        package1
           foo.py
           bar.py
    package2
        baz.py
    .gitmodules
Run Code Online (Sandbox Code Playgroud)

导入git-submodule-repo的结构如下:

foo.py:
from package1.bar import some_func
Run Code Online (Sandbox Code Playgroud)

但是,Pycharm 不承认这一点,并希望我改为拥有以下内容:

foo.py:
from git-submodule-repo.package1.bar import some_func
Run Code Online (Sandbox Code Playgroud)

这是有问题的,因为我不想更改所有导入git-submodule-repo(这似乎不是一个好的做法,而且不可扩展)并且其中git-submodule-repo有破折号,这对于导入来说不是有效的 Python 语法(我可以) t 重命名回购)。

我还需要一种从git-submodule-repo代码中导入的方法。像这样的东西:

baz.py:
from git-submodule-repo.package1.bar import some_func
Run Code Online (Sandbox Code Playgroud)

但当然没有破折号使其语法无效。这是内容.gitmodules以防万一它有用:

[submodule "git-submodule-repo"]
    path = git-submodule-repo
    url = https://github.com/SomeAccount/git-submodule-repo.git
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激!

python-import git-submodules pycharm

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