我的项目具有以下结构:
s3_to_redshift =
S3ToRedshiftOperator(task_id='{0}_to_Redshift'.format(table['name']),
redshift_conn_id=REDSHIFT_CONN_ID,
redshift_schema=REDSHIFT_SCHEMA_NAME,
table=table,
s3_conn_id=S3_CONN_ID,
s3_bucket=S3_BUCKET,
s3_key=S3_KEY,
origin_schema=ORIGIN_SCHEMA,
copy_params=COPY_PARAMS,
schema_location=SCHEMA_LOCATION,
load_type=table['load_type'],
dag=dag)
使用:
project/
+ setup.py
+ bobafett/
+ __init__.py
+ __main__.py
+ foo.py
:一个空文件__init__.py
:包含foo.py
的定义:bar
def bar():
print("foo.bar()")
导入并使用__main__.py
:foo.bar
import foo
foo.bar()
~/project $ python3 bobafett/__main__.py
foo.bar()
后,将不再找到bobafett
foo
那怎么样?我可以写什么而不是~/project $ python3 setup.py bdist_wheel
~/project $ curl -T ... https://my-pypi.example.com/simple/bobafett/...
~/project $ cd /tmp
/tmp $ pip --index-url https://my-pypi.example.com/simple --user bobafett
/tmp $ python -m bobafett
...
File "/home/ysc/.local/lib/python3.6/site-packages/bobafett/__main__.py", line 1, in <module>
import foo
ModuleNotFoundError: No module named 'foo'
来写并且都可以在本地工作?我需要更改项目结构吗?
import foo
:
setup.py
答案 0 :(得分:1)
您可以执行以下操作:
import foo
更改为from . import foo
。它将修复运行的python -m bobafett
,但会破坏python3 bobafett/__main__.py
。python -m bobafett
而不是python3 bobafett/__main__.py
。